var confirm = confirm('Are you sure?');
我剛剛測試了這個聲明,並且給出了一個錯誤,指出confirm
不是函數。Javascript Statement執行命令
我立即檢測到變量名稱正在覆蓋它。然而我的問題是爲什麼?
我知道函數是第一類,並且聲明與函數同名的變量將在相對範圍內覆蓋它。但是我的困惑來自於我認爲是從右到左的執行順序,I.E.函數調用在確定目標之前進行。
在這種情況下函數調用之前變量是否被定義?
var confirm = confirm('Are you sure?');
我剛剛測試了這個聲明,並且給出了一個錯誤,指出confirm
不是函數。Javascript Statement執行命令
我立即檢測到變量名稱正在覆蓋它。然而我的問題是爲什麼?
我知道函數是第一類,並且聲明與函數同名的變量將在相對範圍內覆蓋它。但是我的困惑來自於我認爲是從右到左的執行順序,I.E.函數調用在確定目標之前進行。
在這種情況下函數調用之前變量是否被定義?
由於JavaScript的變量提升:
function myFunction() {
// ...
var confirm = confirm('Are you sure?');
// ...
}
變爲:
function myFunction() {
var confirm;
// ...
confirm = confirm('Are you sure?');
// ...
}
您將需要執行以下操作來執行你的意思:
function myFunction() {
// ...
var confirm = window.confirm('Are you sure?');
// ...
}
_「是否變量成爲在這種情況下在函數調用之前定義?「_ - 是的。在給定範圍內,所有變量都在該範圍內的代碼執行之前被定義,並且它們最初被賦予值「undefined」。閱讀JS變量「提升」。 – nnnnnn 2014-11-21 11:36:37
在這裏看起來很好http://jsfiddle.net/batug0o5/1/ – 2014-11-21 11:39:37
'var'不是可執行語句,受制於從上到下或從右到左的規則或任何其他執行順序。這是一個**聲明**,正如@nnnnn所說,它已經被掛起。 – 2014-11-21 11:40:34