运行以下代码时,我希望函数末尾的警报使用全局定义的变量值“a”(1),但它返回undefined。如果if块中的代码永远不会运行,为什么变量“a”返回为undefined?
var a = 1;
four();
function four() {
if (false) {
var a = 4;
}
alert(a); //alerts undefined
}
javascript解析器是否在条件表达式范围内“看到”变量声明的方式与在其外部“看到”它的方式相同?
答案 0 :(得分:2)
由于变量声明被“提升”到其作用域的顶部,因此第二个var a
被设置在函数作用域内。所以基本上它变成了像:
function four() {
var a;
if (false) {
a = 4;
}
alert(a); //alerts undefined
}
如果您要删除four
功能中的第二个分配,则会提醒window.a
变量而不是four.a
变量。
即:
var a = 1;
function four() {
if (false) {
a = 4;
}
alert(a); //alerts 1
}
答案 1 :(得分:0)
是
所有Javascript变量(和函数)声明都被“提升”到它们的包含函数。
a
局部变量存在于整个函数中(甚至在if
之前),但在分配后只有一个值。