当我在控制台中运行该代码(under a <script> code)
为什么我的js代码不能反映正确的运行时间值?
window.msg = { a: 0}
var b = window.msg;
function g()
{
console.log(b)
}
msg = { a: 1};
g()
- 我得到{A:0}。
这是为什么?我认为,如果你改变你的代码msg = { a: 1};
将更新的参考...
当我在控制台中运行该代码(under a <script> code)
为什么我的js代码不能反映正确的运行时间值?
window.msg = { a: 0}
var b = window.msg;
function g()
{
console.log(b)
}
msg = { a: 1};
g()
- 我得到{A:0}。
这是为什么?我认为,如果你改变你的代码msg = { a: 1};
将更新的参考...
您正在创建对象{ 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的值将是未定义的。但应该看到变化? – d11
@ doomday1然后'b'将永远是'undefined'。关键是变量'msg'和'b'是相互独立的。给一个值赋值不会影响另一个值。但是,如果它们都引用* same *对象,那么当您通过一个变量操作该对象时(例如'msg.a = 1',如* Doge *的答案),您可以通过查看其他变量;即,虽然变量*本身*是独立的,但是引用的对象是相同的。 –
:
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}
对象。
简单来说:分配一个新值变量**从不**(真的,从不!)改变另一个变量的值。 –