为啥obj4.name的值是Tom而不是Bob呢?

<script type="text/javascript">
  var obj3 = {name: 'Tom'}
  var obj4 = obj3
  obj3 = {name: 'JACK'}
  console.log(obj4.name,'=====')
  function f2(obj) {
    obj = {name: 'Bob'}
  }
  f2(obj4)
  console.log(obj4.name)
</script>
阅读 1.9k
3 个回答

image.png

① 产生对象 No.0001(对象没有名字,给个编号方便描述),让变量 obj3 引用它(赋值语句);
② 声明变量 obj4 让它与 obj3 引用相同(赋值),即引用 No.0001
③ 产生对象 No.0002,让变量 obj3 引用它,同时打断 obj3No.0001 的引用;
④ 调用 fn(obj4),参数传递是个入栈→出栈过程。入的是 obj4 引用的对象地址(编号)No.0001,然后把这个引用出给参数 obj。这里 obj4obj 引用同一对象,但它们是不同的变量。
⑤ 改变 obj 的引用,但这并不影响 obj4

obj 是一个新的变量,只不过和 obj4 指向了同一个地址。

但是当 obj = {name: 'Bob'} 的时候,给了 obj 一个新的地址。所以没有同步修改 obj4。

想要修改 obj4 需要 obj.name = 'Bob' ,意思是找到这个地址上的 name 改为 Bob

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