[英]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.