特别简单的 js 变量难点,谁能把我整明白了

var a = {name:"1"}
function fn(obj){
    obj.name = "2";
    obj = {name:"3"};
}
fn(a);
a.name  // "2"

为什么输出是2

阅读 2k
2 个回答

楼上说的还不够详细。

clipboard.png
这里涉及到arguments,在对obj赋值之前,obj也就是

arguments[0]

一直都是对a的引用,赋值操作断开了这个引用链,为obj重新指定了一个引用即一个新的对象{name:'3'}

var a = {name:"1"}是让变量a引用内存中的一个对象{name:"1"}。调用fn(obj)时,变量obj{name:"1"}进行引用,然后执行obj.name = "2";修改了引用对象的name属性。
obj = {name:"3"};是让变量obj引用内存中一个新的对象{name:"3"}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题