有人可以向我解释这里发生的事情导致我的属性被附加到窗口对象:
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)
你正在调用一个函数.无论是否匿名,它都是一种功能.函数有context,this关键字.
您没有提供任何上下文,因此window使用了.
尝试:
var MyObject2 = (function() {
this.property1 = "prop1";
return this;
}).call(this);
Run Code Online (Sandbox Code Playgroud)
在这里,你明确地将上下文定义为"无论当前上下文是什么" - 当然,这可能会再次出现window,但它可能不会 - 如果没有看到更多代码就无法真正说出来.