2014-01-19 97 views
0

我是js的新手,並使用簡單的代碼進行遊戲。當我運行下面的代碼瞭解JavaScript的作用範圍

var x=5; 
function sum(){ 
    alert(x); 
    var x=10; 
    alert(x); 
} 
sum(); 

我收到警報爲「不確定」和10 但是,當我運行下面的代碼,

var x=5; 
function sum(){ 
    alert(x); 
    x=10; 
    alert(x); 
} 
sum(); 

我得到的警報爲「5」和「10」

有人可以請解釋發生了什麼?

注意:對於給出相同的代碼兩次抱歉。現在改變了:)。

謝謝

+3

我沒有看到代碼片段之間的區別。我懷疑他們產生不同的結果。 –

+0

這兩個代碼是相同的! –

+0

@Felix代碼不同,第一個示例在函數中使用var x = 10,而第二個示例不使用。 – Metalskin

回答

2

您提供的功能正受到吊裝的影響。當你聲明一個局部變量時,它被懸掛在函數的頂部,這使x未定義。

翻譯時遇到它吊局部變量x的功能等:

var x=5; 
function sum(){ 
    var x; 
    alert(x); //local x is in scope and undefined 
    x=10; 
    alert(x); 
} 
sum(); 

在您提供的第二個功能,不會出現提升,因爲只有一個全局變量x和功能提醒全局變量與其分配的價值。

所以這兩個函數的主要區別是第一個函數使用兩個變量,一個全局變量和一個局部變量,而第二個函數使用一個全局變量。在第一個函數中,局部變量被懸掛到函數的頂部,導致它爲第一個警報輸出未定義的值。