我不明白为什么foo
的值在以下代码中未定义:
var foo = 1;
function bar() {
if (false) {
var foo = 10;
}
alert("Foo is " + foo);
}
bar();
结果:Foo是undefined
。
https://jsfiddle.net/yk7ae9b0/
尽管这些变化的行为符合预期。
var foo = 1;
function bar() {
if (true) {
var foo = 10;
}
alert("Foo is " + foo);
}
bar();
结果:Foo是10
var foo = 1;
function bar() {
if (false) {
// var foo = 10;
}
alert("Foo is " + foo);
}
bar();
结果:Foo为1
任何帮助都将非常感激。
答案 0 :(得分:6)
您的var foo
未定义在您认为的位置。 JavaScript中的变量的范围限定为使用它们的函数,而不是声明它们的块。因此,您拥有的代码:
function bar() {
if (false) {
var foo = 10;
}
alert(foo);
}
JS引擎实际上解释,好像它被写成:
function bar() {
var foo;
if (false) {
foo = 10;
}
alert(foo); // foo was never assigned a value!
}
因此,当警报触发时,您有一个未定义的变量foo
,它会影响您在函数外声明的全局foo
。
(这也会影响像for(var i=...) ...
这样的事情 - var i
是函数范围的,并且在函数内部的任何地方都是声明的变量,而不仅仅是for循环中的