bind vs apply:这两者有区别吗?

时间:2018-05-25 17:56:17

标签: javascript bind apply

考虑以下功能:

function bind(fn, context) {
  return function() {
    return fn.apply(context, arguments);
  }
}

此功能是否与Function.prototype.bind完全相同?

即,鉴于上面的函数定义,下面两行代码应该实现完全相同的东西吗?

boundFunction = bind(someFunction, someContext);

// same same?

boundFunction = someFunction.bind(someContext);

如果有任何微妙或不那么微妙的差异,它们是什么?

(我问,因为我看到上面定义的函数在某些JavaScript中使用,我想知道他们为什么不简单地使用Function.prototype.bind。)

1 个答案:

答案 0 :(得分:0)

因此,在评论的基础上,这似乎就是答案:

在我的例子中,两行......

boundFunction = bind(someFunction, someContext);
boundFunction = someFunction.bind(someContext);

......确实取得了同样的结果。

然而,"绑定"以这种方式定义的函数不提供绑定其他参数的可能性,如Function.prototype.bind那样,即这样的事情:

function abc(a, b, c) {
  console.log('a: '+a, 'b: '+b, 'c: '+c);
}

// This function predefines the first argument for abc:
var bc = abc.bind(undefined, 'Ay!');
abc('Yo!', 'hello', 'world');
// a: Yo! b: hello c: world
bc('hello', 'world');
// a: Ay! b: hello c: world