當我在控制檯中運行該代碼(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}
對象。
簡單來說:分配一個新值變量**從不**(真的,從不!)改變另一個變量的值。 –