javascript - 使用绑定(bind)函数两次

标签 javascript bind

<分区>

在 [MDN][绑定(bind)]

我们看到这段代码是这样的

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();

是的,我知道绑定(bind)会改变“this”的值,但我混淆了下面的一段代码

var demo=boundGetX.bind(this);// or boundGetX.bind(window);
demo();// still 81

再次使用绑定(bind),我认为它会将“this”点更改为“window”,但事实并非如此。 我想知道为什么。

最佳答案

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

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

无论您如何调用该绑定(bind)函数或对其执行其他操作,originalFunction 都将在特定上下文中被调用。您可以重新绑定(bind)该绑定(bind)函数,这将返回另一个新函数,但这不会影响“内部包装”的原始函数和上下文。

关于javascript - 使用绑定(bind)函数两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45415850/

相关文章:

c++ - 如何创建最大仿函数?

javascript - FlowType 中可能有不兼容的别名?

javascript - 我可以确定之前按下了哪个键吗? JavaScript

Docker挂载顺序乱序,不让我挂载我的目录

winapi - 为什么我不能绑定(bind)到 winproc?

关于绑定(bind)/解除绑定(bind)的 Android 服务问题?

jquery - 解除绑定(bind) jQuery 插件?

javascript - OSX 上的 Firefox 中的插件是否支持 nslProcess?

javascript - react-native 中的图像压缩

JavaScript 不会在函数中输出值