`this`context如何在立即执行的函数中起作用?

时间:2014-05-07 13:41:06

标签: javascript

有人可以向我解释这里发生了什么导致我的属性被附加到窗口对象:

var MyObject = (function () {    
    this.property1 = "prop1";

    return this;
})();
// window.property1 now exists as well as MyObject.property1

这是"对"这样做的方法:

var MyObject = (function () {
    var MyObject = {};
    MyObject.property1 = "prop1";

    return MyObject;
})();
// only MyObject.property1 now exists

1 个答案:

答案 0 :(得分:5)

您正在调用一个函数。无论是否匿名,它都是一种功能。函数有上下文,this关键字。

您没有提供任何背景信息,因此使用了window

尝试:

var MyObject2 = (function() {
    this.property1 = "prop1";
    return this;
}).call(this);

在这里,你明确地将上下文定义为“无论当前上下文是什么” - 当然,这可能再次是window,但是它可能不会 - 如果没有看到更多代码就无法真实地说明。 / p>