You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何以下JavaScript代码输出{a:10}而非预期的null?

问题分析:为何代码输出{a:10}而非预期的null?

先看这段代码:

var a = {};

(function b(a) {
  a.a = 10;
  a = null;
})(a);

console.log(a); // {a: 10}

核心原因是JavaScript的参数传递是按值传递,哪怕是对象类型,传递的也是引用的副本,不是引用本身:

  • 全局变量a一开始指向一个空对象。
  • 调用自执行函数时,把全局a所持有的对象引用值,复制了一份给函数的局部参数a(这个局部a和全局a是两个独立的变量,只是暂时指向同一个对象)。
  • 函数里执行a.a = 10时,因为局部a和全局a指向同一个对象,所以修改对象的属性会同步到全局的那个对象上。
  • 但执行a = null时,只是把局部变量a的指向改成了null,完全不影响全局变量a的指向——全局a依然指向原来的那个对象,只是这个对象已经被添加上了a:10的属性。
  • 所以最后打印全局的a,结果就是{a:10},而非预期的null。

内容的提问来源于stack exchange,提问作者shreyak jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:48:07