题目 06 / 14
为什么 var 会离开 if 代码块?
知识点: 声明实例化
var 属于函数或脚本作用域,而不属于 if 代码块。
使用执行可视化器解题在下方逐步观察每个绑定、函数调用和控制台输出。预测输出结果
两个分支中都有声明,但真正执行了哪些赋值?
if (true) {
var a = 1
} else {
var b = 2
}
console.log(a)
console.log(b)查看答案与完整解析
正确输出
1
undefined为什么会这样
if 求值前,a 和 b 两个 var 绑定都已经在外层作用域中创建。
只有 true 分支执行,所以 a 被赋值为 1;false 分支没有执行,b 保持初始的 undefined。
由于两个绑定都不属于代码块本身,if 结束后仍然可以读取它们。
这道题考察什么
- var 作用域
- 控制流与绑定创建
- 未执行的赋值
运行环境前提
如果把 var 换成 let,就会创建块级绑定,并改变代码块之后的可见性。