当我运行此代码(under a <script> code)
window.msg = { a: 0}
var b = window.msg;
function g()
{
console.log(b)
}
msg = { a: 1};
g()
在控制台中- 我得到{a:0}。
为什么?我认为msg = { a: 1};
会更新参考资料......
答案 0 :(得分:5)
如果您将代码更改为:
window.msg = { a: 0}
var b = window.msg;
function g()
{
console.log(b)
}
msg.a = 1; // this line is changed
g()
您将获得{a:1}
。
您正在重新分配msg
,因此b
只指向msg
的旧值。
b
不会引用window.msg
,而是{a:0}
对象。
答案 1 :(得分:4)
您正在创建对象{ a: 0 }
,并将该对象的引用分配给msg
和b
。稍后,您正在创建一个新对象{ a: 1 }
,并将该对象的引用分配给msg
,但b
仍在引用原始对象:
window.msg = { a: 0} // msg --> { a: 0 }, b --> undefined
var b = window.msg; // msg --> { a: 0 }, b --> { a: 0 }
msg = { a: 1}; // msg --> { a: 1 }, b --> { a: 0 }
g() // prints b --> { a: 0 }