使用绑定功能两次

时间:2017-07-31 12:23:00

标签: javascript bind

在 [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”,但事实并非如此。 我想知道为什么。

1 个答案:

答案 0 :(得分:1)

bind 返回一个新函数,它在调用时保持原始函数的上下文不变。实质上它是这样做的:

function bind(originalFunction, context) {
    return function () {
        originalFunction.call(context);
    };
}

无论您如何调用该绑定函数或您对其执行了哪些操作,都将使用特定上下文调用originalFunction。您可以重新绑定该绑定函数,该函数将返回另一个新函数,但这不会影响内部包含的"内部包装"原始功能和背景。