2014-01-13 61 views
1

我練了一些場景,並找到一個案例:變吊裝 - 「變種」,在功能全局變量名

Here is fiddle

根據封閉條函數應該有機會獲得var x所以我希望提醒1和條件得到虛假由於if(!1)但它提醒undefined和條件得到真實和第二警報是價值10

var x = 1; 
function bar() { 
    alert(x); 
    if (!x) { 
     var x = 10; 
    } 
    alert(x); 
} 
bar(); 

所以我很困惑,爲什麼它是促使不確定?

根據特定範圍內的提升,您可以在任何地方定義一個變量,並始終將其視爲定義在頂部。

如果是由於起重效果,它仍然不得不提醒10而不是未定義。

回答

1

提升將使您的代碼有效的工作是這樣的:

var x; 
x = 1; 
function bar() { 
    var x; //same as var x = undefined; 
    alert(x); 
    if (!x) { 
     x = 10; 
    } 
    alert(x); 
} 
bar(); 
+0

感謝例子講清楚:) –

5

在函數中無處不在,沒有定義的情況下,起重原因變量爲,聲明爲

bar第一線,由於var x功能上的3號線,全球x被屏蔽,你看到當地x(這是undefined因爲它沒有被賦予了價值還)。

bar的第3行,您有x = 10定義變量。這不是懸掛的。

在第5行提醒它,現在定義它。

Venn Diagram of the above

+0

感謝答覆:) –