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

ale*_*ith 1 javascript

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

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

    return this;
})();
// window.property1 now exists as well as MyObject.property1
Run Code Online (Sandbox Code Playgroud)

这是"正确"的方式:

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

    return MyObject;
})();
// only MyObject.property1 now exists
Run Code Online (Sandbox Code Playgroud)

Nie*_*sol 5

你正在调用一个函数.无论是否匿名,它都是一种功能.函数有context,this关键字.

您没有提供任何上下文,因此window使用了.

尝试:

var MyObject2 = (function() {
    this.property1 = "prop1";
    return this;
}).call(this);
Run Code Online (Sandbox Code Playgroud)

在这里,你明确地将上下文定义为"无论当前上下文是什么" - 当然,这可能会再次出现window,但它可能不会 - 如果没有看到更多代码就无法真正说出来.

  • @AndrewLeith你的印象不正确,那么:范围和背景是两回事.您应该使用您在问题中提供的第二个代码块. (2认同)