【发布时间】:2012-10-12 09:24:35
【问题描述】:
可能重复:
What advantages does using (function(window, document, undefined) { … })(window, document) confer?
我越来越多地在我一直使用的库中看到这样的代码:
(function (window) {
var Foo = function () {
}
window.Foo = Foo;
})(window);
我看到这样做的理由是在创建(伪)类时避免在全局范围内工作。但是,如果我错了,请纠正我,我一直明白 window 是全局范围。我相信,当您创建一个全局变量时,您实际上只是向窗口添加了一个属性......除非这对于 ES5 strict 有所改变?
那么,基本上,有什么意义呢?我可以看到像这样组织的代码的唯一好处是,如果您想在以后通过传入除 window 之外的参数轻松更改类的命名空间。
【问题讨论】:
-
检查此线程:stackoverflow.com/questions/5020479/… 和此线程:stackoverflow.com/questions/2716069/… ... 看起来这主要是出于与函数查找速度有关的性能原因
-
答案是,虽然在这个函数的作用域内定义了各种变量,但最后只有 Foo 成员附加到窗口。这样您就可以让您的逻辑变量完成他们的业务并保持在全局范围之外。
-
其他可能有用的线程:stackoverflow.com/questions/8275658/…stackoverflow.com/questions/4598479/… TL;DR:现在可以覆盖窗口,还有边际性能和缩小优势
标签: javascript