我不明白为什么 foo
的值在以下代码中未定义:
var foo = 1;
function bar() {
if (false) {
var foo = 10;
}
alert("Foo is " + foo);
}
bar();
结果:Foo 是未定义
。
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
任何帮助将不胜感激。
最佳答案
您的 var foo
未在您认为的位置定义。 JavaScript 中变量的作用域是使用它们的函数,而不是声明它们的 block 。因此,您拥有的代码:
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!
}
因此,当警报触发时,您有一个 undefined variable foo
,它隐藏了您在函数外声明的全局 foo
。
(这也会影响诸如 for(var i=...) ...
之类的事情——var i
是函数范围的,并且将是一个已声明的变量函数内的任何地方,而不仅仅是在你的 for 循环内)
关于javascript - 为什么这个JS代码打印undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29438078/