Javascript 为什么';nt my js代码是否反映了正确的运行时值?

Javascript 为什么';nt my js代码是否反映了正确的运行时值?,javascript,Javascript,当我运行此代码时(在代码下) 在控制台中,我得到{a:0} 为什么呢?我认为msg={a:1}

当我运行此代码时(在代码下)

在控制台中,我得到{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}
,并将对该对象的引用分配给
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 }

如果我删除第一行怎么办?window.msg的值将是未定义的。但是b应该看到变化吗?@doomday1那么
b
将始终是
未定义的。关键是变量
msg
b
彼此独立。给一个赋值不会影响另一个。但是,如果它们都引用同一个对象,那么当您通过一个变量操纵该对象时(例如,
msg.a=1
,如Doge的回答),您可以通过查看另一个变量看到该变化;i、 虽然变量本身是独立的,但引用的对象是相同的。用非常简单的术语来说:给变量赋值永远不会(真的,永远不会!)改变另一个变量的值。
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 }