2014-02-18 59 views
0

我發現在Javascript中聲明變量時似乎沒有必要使用關鍵字'var'。事實上,我沒有發現完全忽略它的不良副作用。是否有必要使用關鍵字'var'在Javascript中聲明變量

也許這是不好的形式,但有人可以解釋爲什麼這將是必要的嗎?

+2

這是必要的,你絕對應該用'var'聲明變量(在適當的範圍)。在「嚴格」模式下,不聲明變量是運行時錯誤。 – Pointy

+0

隨機污染全球範圍非常糟糕。 –

+0

http://blog.safeshepherd.com/23/how-one-missing-var-ruined-our-launch/ – Andy

回答

4

使用關鍵字var可確保您的變量的範圍是正確的。如果您不使用關鍵字,那麼JavaScript會自動將該變量創建爲全局範圍,這可能會在稍後執行頁面時導致問題。

name = 'Bic'; // implicitly global 

function myFunc() { 
    var name = 'John'; // this variable is scoped here 
    console.log(name); // John 
    getName(); // Bic 
} 

function getName() { 
    console.log(name); //Bic 
} 

myFunc(); 
getName(); 

在上面的代碼中,我聲明瞭一個全局名稱和一個作用域名。請注意,在myFunc()完成執行後,全局名稱將繼續保留。 name是大多數HTML元素的屬性。在這個特定的答案中,我沒有使用var關鍵字的名稱聲明可能會對頁面的執行產生不利影響。 name的值會被拋出作用域,這會影響目標元素和其他內容。如果您看一下這個Fiddle,並在加載後再次單擊運行,您會注意到它會自動打開一個新選項卡。這是因爲名稱的原始值已被破壞,並且頁面不知道真正打開的位置。

作爲一般規則,最好總是用var關鍵字聲明變量,因爲這樣可以更容易地遵循該變量的範圍,避免它們可能導致的無法預料的問題。

正如Pointy指出的那樣,'use strict'編譯指示(在ECMAScript 5中引入)實際上禁止在沒有var關鍵字的情況下聲明變量。

+2

而在「嚴格」模式下,未聲明的變量會導致錯誤。 – Pointy

1

如果你沒有聲明它,也許你正在訪問一個全局變量。要小心,因爲你會得到不希望的副作用。

1

根據定義,聲明變量需要var關鍵字。還有,雖然創建變量的其他方法,比如包括它們在正式的參數列表:

function foo(a, b, c) {...} 

這裏一個bç創建或多或少彷彿他們與申報var。在其他答案中註明了創建變量的不良影響var

相關問題