簡體   English   中英

將全局變量傳遞給函數是否有價值?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM