根据 MDN: 绑定方法
调用
f.bind(someObject)
会创建一个具有与 相同的主体和范围的新函数f
,但是在原始函数中发生这种情况的地方,在新函数中,它永久绑定到 的第一个参数bind
,无论该函数如何使用:
function f() {
return this.a;
}
var g = f.bind({a: 'azerty'});
console.log(g()); // azerty
var h = g.bind({a: 'yoo'}); // bind only works once!
console.log(h()); // azerty
var o = {a: 37, f: f, g: g, h: h};
console.log(o.a, o.f(), o.g(), o.h()); // 37, 37, azerty, azerty
但是当我尝试下面的代码时:
var module = {
x: 42,
getX: function() {
return this.x;
}
}
var unboundGetX = module.getX;
console.log(unboundGetX()); // The function gets invoked at the global scope
// expected output: undefined
var boundGetX = unboundGetX.bind(module);
console.log(boundGetX()); // expected output: 42
module.x = 43;
boundGetY = boundGetX.bind(module);
console.log(boundGetY()); // shouldn't this be 42??
预期输出:
undefined
42
42
实际输出:
undefined
42
43
有人可以向我解释一下吗?