标识符查找难题

时间:2012-03-30 05:23:03

标签: javascript

我理解为什么以下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”的值。

2 个答案:

答案 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()); 

这是从未执行的分配声明,而不是变量声明。而你正在返回尚未定义的局部变量。