我理解为什么以下alert()返回“blue”。
var color = "blue";
function getcolor () {
return color;
color = "red";
}
alert(getcolor());
如果我没有错误,该函数在返回语句后停止执行,防止全局“颜色”变量被覆盖。
但是,如果我们将函数的定义更改为以下内容,为什么alert()会返回“undefined”?
var color = “blue”;
function getcolor () {
return color;
var color = “red”;
}
alert(getcolor());
我预计getcolor()函数会像之前一样在return语句之后退出,并返回全局颜色变量“blue”的值。
答案 0 :(得分:2)
局部变量是 - ,无论实际的var语句在函数的哪个位置 - 在函数的开头创建。您的后一个代码转换为类似的内容;
var color = “blue”;
function getcolor () {
var color;
return color;
color = “red”;
}
alert(getcolor());
更清楚地显示了为什么你会得到你正在获得的效果。
答案 1 :(得分:0)
var语句在进入函数时执行,无论代码在实际语句中有多深。所以实际的代码是:
var color = "blue";
function getcolor ()
{
var color;
return color;
color = "red";
}
alert(getcolor());
这是从未执行的分配声明,而不是变量声明。而你正在返回尚未定义的局部变量。