题目 04 / 31

全局代码能读取函数内部声明的变量吗?

知识点: 词法作用域难度: 基础

函数内部的 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。

这道题考察什么

  • 函数作用域
  • 环境生命周期
  • 外层查找失败

运行环境前提

按非模块脚本运行;在模块中,局部变量不可见这一结论同样成立。

规范参考

JavaScript 代码编辑器支持直接编辑或粘贴自定义代码
第 0 步 / 共 0 步
←→单步Space播放
按 → 单步 或 Space 自动播放
阶段 1: 编译预解析(变量提升与内存分配)
➔
阶段 2: 代码执行(逐行赋值与调用求值)
单步执行原理解析

按键盘右方向键 “→” 进行单步调试,或按空格键 “Space” / 点击 “▶ 自动播放” 进行连续执行。