javascript标识符查找

时间:2012-11-03 12:44:42

标签: javascript

我正在阅读面向网络开发人员的专业JavaScript

有一些奇怪的事情。

var color = "blue";

function getColor() {
    var color = "red";
    return color;
}

getColor();   // "red"

答案很明显。但是下面的解释很奇怪。 “如果其中一个操作数是一个对象而另一个操作数不是,则在对象上调用valueOf()方法,以根据先前的规则检索要比较的原始值。”

我只是不明白。显而易见的是,它会返回本地颜色。

3 个答案:

答案 0 :(得分:0)

你是绝对正确的,它总会返回红色。在这种情况下,虽然技术上正确,但解释似乎不合适。很难记住所有这些东西而不会误入歧途。

答案 1 :(得分:0)

如果变量或函数参数在内部作用域中定义,并且与作用域外的变量/参数同名,则该变量将使另一个变量蒙上阴影。但是一旦你回到外部范围,前一个变量仍然会有它的初始值。没有比你的例子更好的了。它只是两个作业和一个功能声明。

var color = ...表示正在制作一个新变量。如果我们具有var关键字,则在调用函数时,外部作用域中的变量color将具有更改的值。但我们只创建一个局部范围的变量,一个不会干扰另一个的变量。

答案 2 :(得分:0)

您的代码是

var color = "blue";

function getColor() {
    var color = "red";
    return color;
}

getColor();   // "red"

<强>答案 如果从函数调用,颜色变量将始终包含红色,因为它是本地声明和定义。

但在调用函数后,如果要获取颜色的值,则其值变为蓝色。