为什么我的js代码没有反映正确的运行时值?

时间:2014-03-07 16:24:45

标签: javascript

当我运行此代码(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};会更新参考资料......

2 个答案:

答案 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 },并将该对象的引用分配给msgb。稍后,您正在创建一个新对象{ 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 }