2011-04-26 93 views
1

可能重複:
Why is it bad to make elements global variables in Javascript?全局變量有什麼不好?

在JavaScript的聖經,據說全局變量(不帶 「VAR」 關鍵字聲明的變量)是一個非常糟糕的事情。好吧,與強類型語言(如Java或C++)相比,JavaScript就像街頭流氓俚語(是!)。

但是有沒有任何性能問題?或者它導致瀏覽器崩潰?或者在使用全局變量時有一些明顯的差異?

我學習了JavaScript,並遵循書籍和專家的指導原則,但很高興知道這是一個如此重要的主題。

回答

1

如果採用良好的結構化方法,全局變量是完全可以接受的,並且實際上可以節省一些開銷/複製各種指針/變量的開銷。

對我來說,使用本地變量更重要的是讓代碼維護,調試和移植到其他系統是多麼容易。

+0

僅僅使用當地人沒有任何性能收益? – Ibu 2011-04-26 07:52:40

5

全局變量可能會產生意想不到的副作用(距離作用)。

例如,當您意圖使用局部變量i而忘記了var和其他一些代碼(即跑前)做了同樣的話開始您與變量舊值的使用。這可能會讓你的代碼狂飆它的軌道,並且很難追查(「價值最終在這裏?」)。

就在前幾天there was a question about a similar problem(在Java中,但是)並且導致太多混淆。

除此之外,它增加了變量的範圍,這意味着即使您不再需要訪問它,也會導致內存泄漏,它的內存不能被回收。

+1

正確。你也可以按照這個鏈接。它包含(不僅是「全球副作用」)很多JavaScript怪癖和處理它們的方法。 http://bonsaiden.github.com/JavaScript-Garden/#function.scopes – dmarucco 2011-04-26 07:44:23

2

我想說這裏有兩個主要問題:

  • 吊裝
  • 重新定義外部變量的

的提升問題出來主要是想確定裏面有什麼你相同的變量時,可能認爲是不同的範圍,但實際上不是(例如,if語句的大括號內外)。

JavaScript將所有變量定義向上推,然後在最初聲明和分配變量的位置分配值。這可能會導致一些奇怪的錯誤,你可能會在不知不覺中重新定義你自己的全局變量(可怕...)

另一個問題是,如果你在項目中使用外部庫,你可以很容易覆蓋一個已經定義好的變量,因此會失去一些提供的功能(你可能不想這麼做),並引入一些微妙的錯誤(再次)。

我建議儘可能地包含局部變量,或者可以使用「命名空間」來分隔它們。

最糟糕的是,對於這兩個問題,JavaScript將保持沉默,所以他們很難找到錯誤。