<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>
<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>
obj 是一个新的变量,只不过和 obj4 指向了同一个地址。
但是当 obj = {name: 'Bob'}
的时候,给了 obj 一个新的地址。所以没有同步修改 obj4。
想要修改 obj4 需要 obj.name = 'Bob'
,意思是找到这个地址上的 name 改为 Bob
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
① 产生对象
No.0001
(对象没有名字,给个编号方便描述),让变量obj3
引用它(赋值语句);② 声明变量
obj4
让它与obj3
引用相同(赋值),即引用No.0001
。③ 产生对象
No.0002
,让变量obj3
引用它,同时打断obj3
对No.0001
的引用;④ 调用
fn(obj4)
,参数传递是个入栈→出栈过程。入的是obj4
引用的对象地址(编号)No.0001
,然后把这个引用出给参数obj
。这里obj4
和obj
引用同一对象,但它们是不同的变量。⑤ 改变
obj
的引用,但这并不影响obj4
。