Javascript 函数和 this

标签 javascript closures

我正在学习 javascript,但我对函数/闭包有一些疑问,我有以下代码:

var obj = { value: 0 };

obj.test = function() {

    var that = this;

    var f1 = function() {

        console.log(that);
    };

    f1();


};

obj.test();

var x = obj.test;

x();

我知道当像 f() this 这样的函数被调用时引用全局对象,但在我的示例中,当定义 f1 时,它有一个引用 thatthis引用 obj 的外部函数。 我希望该函数记住创建它的上下文,所以为什么最后一次调用 x()引用全局对象?

谢谢

最佳答案

I expect that the function remember the context in which it was created

这就是你的错误。在这种情况下,JavaScript 函数不会“记住”与任何特定对象的任何关系。他们唯一记住的是父词法上下文链中的范围内变量。在本例中,“obj”变量就是这样一个变量。

您可以使用 .bind() 方法显式创建一个函数来记住与对象的关系。

obj.boundTest = obj.test.bind(obj);

var x = obj.boundTest;
x(); // will do the right thing

或者更简单:

var x = obj.test.bind(obj);
x();

关于Javascript 函数和 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135488/

相关文章:

javascript - 如何在闭包中乘以数字

javascript - 是否可以调用闭包内定义的函数?

javascript - 删除自动发布后在 Meteor 中获取 Facebook 头像

Javascript 区分大小写过滤器不起作用

javascript - 维基百科 API + 跨域请求

PHP:程序代码 - 使用命名空间或闭包数组来避免污染全局命名空间?

ios - Swift 闭包和执行顺序

javascript - 如何检查我的响应是字符串还是 JSON 对象?

javascript - setInterval 游戏循环的范围问题

javascript - 如何在 'modules' 中组织我的代码?