繁体   English   中英

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

[英]why does'nt my js code reflect the right runtime value?

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

如果您将代码更改为:

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}对象。

您正在创建对象{ 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 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM