簡體   English   中英

全局變量與將值傳遞給函數?

[英]Global variables vs. passing a value into a function?

我是JavaScript的新手,並且有一個關於訪問函數中變量的最佳實踐的簡單(我推測)問題:

什么時候應該聲明一個全局變量,而不是簡單地將值傳遞給函數?

聲明全局變量應僅用作最后的選項。

全局變量一般都很糟糕,特別是在javascript中。 根本沒有辦法阻止另一段javascript破壞你的全局。 clobbering將無聲地發生並導致運行時錯誤。

以下面的例子為例。

// Your code
myParam = { prop: 42 };
function operateOnMyParam() {
  console.log(myParam.prop);
}

在這里,我宣布了2個全局變量

  • myParam
  • operateOnMyParam

這可能在單獨測試您的javascript時工作正常。 但是,如果在測試用戶之后將您的javascript庫與我的javascript庫(恰好具有以下定義)相結合,會發生什么

// My code
function myParam() {
  console.log("...");
} 

這也定義了一個名為myParam的全局值,它與myParam沖突。 哪一個獲勝取決於腳本的導入順序。 但無論哪種方式,我們中的一個人都遇到麻煩,因為我們的一個全球物體已經死了

有許多原因......但是一個簡單的原因是..函數的參數只存在於函數中,而它正在運行。 全局變量始終存在,這意味着:

  • 它會占用內存,直到您手動“銷毀”它
  • 每個全局變量名稱都必須是唯一的
  • 如果,在你的函數中...你調用另一個函數...最終調用第一個函數,突然間你可能會得到意想不到的結果。

簡而言之:因為函數參數只存在很短的時間並且不存在於函數之外,所以更容易理解正在發生的事情,並且大大降低了錯誤的風險。

在處理無框架JavaScript時,我會將我的簡單變量和函數存儲在對象文字中,以免混淆全局命名空間。

var myObject = {
   variableA : "Foo",
   variableB : "Bar",
   functionA : function(){
      //do something
      //access local variables
      this.variableA
   }
}

//call functions and variables
myObject.variableA;
myObject.functionA();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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