我認爲myColor
將從sayColor()
本地上下文訪問,但它不是即使我第一次警報後聲明myColor。爲什麼?爲什麼我的全局變量在函數中不可訪問?
var myColor = "blue";
function sayColor() {
alert(myColor); //undefined expected blue
var myColor = "green";
alert(myColor); //green
}
sayColor();
我認爲myColor
將從sayColor()
本地上下文訪問,但它不是即使我第一次警報後聲明myColor。爲什麼?爲什麼我的全局變量在函數中不可訪問?
var myColor = "blue";
function sayColor() {
alert(myColor); //undefined expected blue
var myColor = "green";
alert(myColor); //green
}
sayColor();
您正在隱藏全局變量myColor
與同名的局部變量。從函數中刪除var
關鍵字以查看全局變量。
var myColor = "blue";
function sayColor() {
alert(myColor);
myColor = "green"; // Omit the "var" keyword.
alert(myColor);
}
sayColor();
的Javascript只有功能範圍,所以他們在整個功能可在函數內聲明的所有變量都提升到頂部。 OP原始版本中的第一個警告是使用未初始化的,懸掛的本地變量,這就是爲什麼它打印undefined
。
您正在重新設置函數內部的變量。瀏覽器在分配之前正在讀取該函數,這會導致未定義的結果。
它是正確的。
var myColor = "blue";
function sayColor() {
alert(myColor); //undefined expected blue
myColor = "green";
alert(myColor); //green
}
sayColor();
因爲您再次聲明它。
var myColor = "green";
在JavaScript中之前由解釋程序執行的功能,它掃描var ...
語句整個功能。所以這就是爲什麼你的myColor變量在你的函數的第一個語句被執行之前被重置。
是的,但不應該在第一次警報中可用,因爲它尚未聲明? –
@AlfredoOsorio不,這不是JavaScript的功能。變量在聲明它們的整個函數中都是可見的。 –
變量聲明*被懸掛*到函數的頂部。它是有效的:'function sayColor(){var myColor;警報(myColor); myColor =「綠色」;警報(myColor); }' – 1983