我正在阅读面向网络开发人员的专业JavaScript
有一些奇怪的事情。
var color = "blue";
function getColor() {
var color = "red";
return color;
}
getColor(); // "red"
答案很明显。但是下面的解释很奇怪。 “如果其中一个操作数是一个对象而另一个操作数不是,则在对象上调用valueOf()方法,以根据先前的规则检索要比较的原始值。”
我只是不明白。显而易见的是,它会返回本地颜色。
答案 0 :(得分:0)
你是绝对正确的,它总会返回红色。在这种情况下,虽然技术上正确,但解释似乎不合适。很难记住所有这些东西而不会误入歧途。
答案 1 :(得分:0)
如果变量或函数参数在内部作用域中定义,并且与作用域外的变量/参数同名,则该变量将使另一个变量蒙上阴影。但是一旦你回到外部范围,前一个变量仍然会有它的初始值。没有比你的例子更好的了。它只是两个作业和一个功能声明。
var color = ...
表示正在制作一个新变量。如果我们不具有var
关键字,则在调用函数时,外部作用域中的变量color
将具有更改的值。但我们只创建一个局部范围的变量,一个不会干扰另一个的变量。
答案 2 :(得分:0)
您的代码是
var color = "blue";
function getColor() {
var color = "red";
return color;
}
getColor(); // "red"
<强>答案强> 如果从函数调用,颜色变量将始终包含红色,因为它是本地声明和定义。
但在调用函数后,如果要获取颜色的值,则其值变为蓝色。