题目 04 / 14
全局代码能读取函数内部声明的变量吗?
知识点: 词法作用域
函数内部的 var 绑定对外层全局环境不可见。
使用执行可视化器解题在下方逐步观察每个绑定、函数调用和控制台输出。预测输出结果
函数已经返回后,它的局部变量 b 会不会自动变成全局变量?
var a = 10;
(function () {
var b = 20;
})();
console.log(a);
console.log(b);查看答案与完整解析
正确输出
10
Uncaught ReferenceError: b is not defined为什么会这样
a 是全局 var 绑定,因此第一次输出 10。
b 属于立即执行函数调用时创建的环境。函数返回不会把 b 复制到全局环境。
随后从全局代码查找 b 会失败并抛出 ReferenceError。
这道题考察什么
- 函数作用域
- 环境生命周期
- 外层查找失败
运行环境前提
按非模块脚本运行;在模块中,局部变量不可见这一结论同样成立。