2012-10-05 42 views
3

可能重複:
is there any Advantage of redeclaring javascript variables?聲明變量使用VAR分配後至可變

爲什麼以下代碼顯示器1而不是未定義:

a = 1; 
var a; 
alert(a); 
+0

爲什麼你會_think_它應該提醒'undefined'?你已明確指定'a'! –

+0

我最初的假設是變量將被重新聲明。我通過運行代碼知道作業仍然存在,但不知道爲什麼。我想我可以放棄'而不是未定義'部分,但認爲它會添加一些上下文。 – markm247

回答

9

1) var不重新聲明或刪除變量

2)即使它,你的代碼被改寫*使用JavaScript提升規則(任何變量或函數聲明被移到最近的封閉功能的頂部)如下:

var a; 
a = 1; 
alert(a); 

(*有效改寫;請參閱RobG關於輸入執行上下文的註釋和鏈接以進行說明)

+0

+1變量提升 – jimp

+0

有趣的是,這是JavaScript解釋器的通用規則? –

+1

@ AntoineLafarge - 這是每個ECMA-262在[輸入執行上下文](http://ecma-international.org/ecma-262/5.1/#sec-10.4)(全局或函數)上的指定行爲。首先將[聲明的函數和變量](http://ecma-international.org/ecma-262/5.1/#sec-10.5)添加到variableEnvironment中,然後執行代碼。你的回答比這個更正確。 – RobG