下面的代码是JavaScript代码。我正在尝试理解JavaScript中的函数范围,并且在here之后的文章之后。我正在复制下面的代码 -了解JavaScript函数范围
var cow = "purple"; // just a random cow
var f = function (x) {
var r = 0;
cow = "glue";
if (x > 3) {
var cow = 1; // a local variable
r = 7;
}
return r;
};
var z = f(2);
alert(cow); // returns purple
我不太明白为什么字符串“紫色”被警告。 cow = "glue";
行应该将cow变量的值设置为“glue”。如果我删除了if块,然后在最后一条语句中警告牛,我会看到字符串“glue”被警告。
当f(2)被调用时,if代码块没有被输入,也没有任何内容被执行,所以为什么我会看到不同的结果?即为什么在上一条语句中提醒母牛现在返回字符串“purple”?
实际上,即使'catch'块都没有自己的作用域(*变量*环境)。请参阅[为什么catch子句有自己的*词法*环境?](http://stackoverflow.com/q/15034864/1048572) – Bergi