var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
如何顯示1的輸出?功能範圍瞭解不清
return;
function a() {}
函數體內執行?
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
如何顯示1的輸出?功能範圍瞭解不清
return;
function a() {}
函數體內執行?
您的代碼具有誤導性,風格使人們認爲執行順序很重要。標準的JavaScript引擎這些天將採取和重新格式化之前運行它:
var a = 1,
b = function() {
var a = function() {};
a = 10;
return;
};
b();
alert(a);
現在你可以瞭解到底發生了什麼。在函數「b」中再次聲明「a」,所以實際上現在有兩個「a」變量。一個是「window.a」,另一個是「b var a」,但不是「b.a」,因爲它不能在閉包或函數之外訪問。
換句話說,你得到你的代碼。
請讓您的代碼易讀並且不要混淆這一觀點。
在函數中用最後一行聲明符號「a」。這是受轉讓聲明影響的「a」。
函數聲明語句被懸掛到函數的頂部並首先被解釋。因此,賦值語句在之後有效地發生,您已經聲明瞭一個名爲「a」的函數(局部於「b」函數)。因此,該作業影響即符號,而不是全球「a」。
請記住,變量不是鍵入的,因此您將名稱綁定到函數的事實不會阻止它稍後被賦值爲數值。
哇。這是javascript可愛的靈活性的一個很好的例子,如果你不小心如何編寫它,麻煩會讓你陷入困境。 – 2011-12-16 22:33:20
是的!簡單明瞭的JavaScript使它變得複雜:-) – Pointy 2011-12-16 22:35:08