Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript标识符查找_Javascript - Fatal编程技术网

javascript标识符查找

javascript标识符查找,javascript,Javascript,我正在阅读面向Web开发人员的专业JavaScript 有些奇怪的东西 var color = "blue"; function getColor() { var color = "red"; return color; } getColor(); // "red" 答案显而易见。但下面的解释是不正确的。如果其中一个操作数是对象,而另一个不是对象,则会对该对象调用valueOf()方法来检索要根据前面的规则进行比较的基元值 我就是不明白。很明显,无论发生什么情况,它都会

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

有些奇怪的东西

var color = "blue";

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

getColor();   // "red"
答案显而易见。但下面的解释是不正确的。如果其中一个操作数是对象,而另一个不是对象,则会对该对象调用valueOf()方法来检索要根据前面的规则进行比较的基元值


我就是不明白。很明显,无论发生什么情况,它都会返回本地颜色。

您完全正确,它将始终返回红色。这种解释虽然在技术上是正确的,但在这种情况下似乎不合适。哎呀,要记住所有这些东西而不被引入歧途是很难的。

当一个变量或函数参数在一个内部作用域中被定义为与作用域外的变量/参数同名时,该变量将掩盖另一个变量。但一旦返回到外部范围,前一个变量仍将具有其初始值。没有什么比得上你的榜样。它只是两个赋值和一个函数声明


var color=…
表示正在生成一个新变量。如果没有
var
关键字,则调用函数时,外部范围中的变量
color
的值会发生变化。但是我们只创建一个局部作用域变量,一个不会干扰另一个。

您的代码是这样的

var color = "blue";

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

getColor();   // "red"
回答 如果从函数调用,则颜色变量将始终包含红色,因为它是本地声明和定义的


但是在调用函数后,如果您想得到color的值,那么它的值将变为蓝色。

解释与示例代码无关。根据ECMAScript规范,我在代码中看不到两个操作数的表达式,它们是“变量语句”。每个都由“标识符”和“初始值设定项”组成“初始值设定项”由“=”符号和“赋值表达式”组成,在本例中是一个简单的字符串文字。@xdazz我也这么想,我知道你的意思。但正如作者所说,(如果操作数指向颜色),如果其中一种颜色是object,而另一种不是object,则会调用valueOf方法,并且。。。。。