[英]Is there value in passing a global variable to a function?
我最近看到的代码如下所示:
(function (someGlobal) {
someGlobal.DoSomething();
})(someGlobal);
someGlobal是一个大型框架类。 它可能是JQuery。 这样做有什么好处? 这是一个好习惯吗? 看起来这段代码是等效的,不易出错,因为你没有隐藏全局:
(function () {
someGlobal.DoSomething();
})();
如果全局覆盖,您有可靠的参考
它缩短了访问它的范围链
“看起来这段代码是等价的,不易出错,因为你没有隐藏全局: ”
(function () { someGlobal.DoSomething(); })();
如果您预计全局被覆盖,并且您的代码依赖于覆盖的值,那么显然您不希望通过函数中的局部变量来遮蔽它。
除此之外,函数中的本地引用不应该更容易出错。
我同意它是否是一个全局变量然后为什么通过它? 只需将其用作全局。
但是,似乎这可能是一个有效的过渡机制来删除全局。 例如,如果我继承了一个包含大量全局变量的大型代码库,那么一种潜在的过渡机制就是以这种精确的方式慢慢消除全局使用。 可以通过这种方式以最小的差异递增地完成更改。
好处是,在该函数中, someGlobal
是明确的。
这样,您可以在安全范围内使用别名。
(function ($) {
$.DoSomething();
})(someGlobal);
更新:
最重要的是这种方式为您定义了使用someGlobal
的安全范围。
如果你使用第二种方式, someGlobal
仍然是一个全局的,只是你在回调函数中使用someGlobal
,并且你在外面某处覆盖someGlobal
,会发生什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.