我最近看到的代码如下:
(function (someGlobal) {
someGlobal.DoSomething();
})(someGlobal);
其中someGlobal是一个大型框架类。它可能是JQuery。这样做有什么好处?这是一个好习惯吗?看起来这段代码是等效的,不易出错,因为你没有隐藏全局:
(function () {
someGlobal.DoSomething();
})();
答案 0 :(得分:2)
如果全局覆盖
它缩短了访问它的范围链
“看起来这段代码是等效的,不易出错,因为你没有隐藏全局:”
(function () { someGlobal.DoSomething(); })();
如果您预计全局被覆盖,并且您的代码依赖于覆盖的值,那么显然您不希望通过函数中的局部变量对其进行遮蔽。
除此之外,函数中的本地引用不应再容易出错。
答案 1 :(得分:1)
我同意,如果它是一个全局变量那么为什么要通过呢?只需将其用作全局。
然而,似乎这可能是一个有效的过渡机制来删除全局。例如,如果我继承了一个包含大量全局变量的大型代码库,那么一种潜在的过渡机制就是以这种精确的方式慢慢消除全局使用。可以通过这种方式以最小的差异递增地进行更改。
答案 2 :(得分:0)
好处是,在该函数中,someGlobal
是明确的。
答案 3 :(得分:0)
这样您就可以在安全范围内使用别名。
(function ($) {
$.DoSomething();
})(someGlobal);
的更新强> 的
最重要的是这种方式为您定义了使用someGlobal
的安全范围。
如果您使用第二种方式,someGlobal
仍然是全局的,只是在回调函数中使用someGlobal
的映像,并且您在外面的某处覆盖someGlobal
,会发生什么?