我认为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