使用.bind()方法调整javascript参数

时间:2017-10-11 09:59:04

标签: javascript parameters bind apply currying

我正在研究Kyle的辛普森着作“你不了解JS:这个和对象原型”的代码,并坚持代码示例,如下所示。

在执行var bar = foo.bind(null, 2);代码后,任何人都可以解释条形变量如何将“a”参数保存为2并保存该保存参数的位置,以及为什么在bar(3);代码执行时不会覆盖参数?

function foo(a, b) {
  console.log(a, b);
  console.log("a:" + a + ", b:" + b);
}

foo.apply(null, [1, 10]);

var bar = foo.bind(null, 2);
bar(3);

1 个答案:

答案 0 :(得分:0)

  

您还可以在1st(this)参数之后添加额外的参数   bind会将这些值传递给原始函数。任何   您稍后传递给绑定函数的其他参数将是   在绑定参数之后传入。

所以在你的例子中:

function foo(a, b) {
  console.log(a, b);
  console.log("a:" + a + ", b:" + b);
}

var bar = foo.bind(null, 2);

这里我们只在this引用参数之后传递了一个参数,而且是a。如果你这样称呼它:

bar();// here a is 2 and b is undefined(no parameter passed).

bar(3);// a is 2 and b is 3

bar(3);相当于:

foo.bind(null, 2, 3);
bar();