题目 10 / 31

修改参数会改变外层的基本类型变量吗?

知识点: 函数调用难度: 基础

参数接收数字值的副本,并保存在独立的函数绑定中。

使用执行可视化器解题在下方逐步观察每个绑定、函数调用和控制台输出。

预测输出结果

为什么函数内外两次 console.log 会输出不同数值?

let a = 1
function b(a) {
  a = 2
  console.log(a)
}
b(a)
console.log(a)
查看答案与完整解析

正确输出

2
1

为什么会这样

求值 b(a) 时先读取外层的数值 1,再用这个值初始化名为 a 的参数绑定。

函数内部 a = 2 修改的是参数绑定,所以内部输出 2。

外层 let 绑定是另一个独立绑定,函数返回后仍然保存 1。

这道题考察什么

  • 实参求值
  • 参数初始化
  • 独立词法绑定

运行环境前提

本题使用基本类型。传入对象仍然是复制一个值,只是该值是对象引用。

规范参考

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

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