【发布时间】:2015-08-18 18:16:03
【问题描述】:
运行以下代码时,我希望函数末尾的警报使用“a”(1) 的全局定义变量值,但它反而返回未定义。如果 if 块中的代码从未运行,为什么变量“a”返回未定义?
var a = 1;
four();
function four() {
if (false) {
var a = 4;
}
alert(a); //alerts undefined
}
javascript 解析器在条件表达式范围内“看到”变量声明的方式是否与在条件表达式之外“看到”变量声明的方式相同?
【问题讨论】:
-
我认为这里发生的事情是函数定义中的 a 被提升到函数的顶部,因此您正在提醒的 a 是函数定义中未定义的“a”,因为除非执行 if 语句,否则不会分配 a。
-
@Brodie:这与函数提升无关。
-
@SLaks 想说的是,由于 a 被分配为函数
four的变量,因此在运行之前它在函数范围内被设置为未定义。 -- 对不起,如果我的术语不对。
标签: javascript scope