在 [MDN] [绑定]
我们看到这样的代码
this.x = 9; // this refers to global "window" object here in the browser
var module = {
x: 81,
getX: function() { return this.x; }
};
module.getX(); // 81
var retrieveX = module.getX;
retrieveX();
// returns 9 - The function gets invoked at the global scope
var boundGetX = retrieveX.bind(module);
boundGetX();
是的,我知道绑定会改变“this”值,但我混淆了下面的代码
var demo=boundGetX.bind(this);// or boundGetX.bind(window);
demo();// still 81
再次使用bind我认为它会将“this”指向“window”,但事实并非如此。 我想知道为什么。
答案 0 :(得分:1)
bind
返回一个新函数,它在调用时保持原始函数的上下文不变。实质上它是这样做的:
function bind(originalFunction, context) {
return function () {
originalFunction.call(context);
};
}
无论您如何调用该绑定函数或您对其执行了哪些操作,都将使用特定上下文调用originalFunction
。您可以重新绑定该绑定函数,该函数将返回另一个新函数,但这不会影响内部包含的"内部包装"原始功能和背景。