2014-03-07 132 views
3

當我在控制檯中運行該代碼(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};將更新的參考...

+0

簡單來說:分配一個新值變量**從不**(真的,從不!)改變另一個變量的值。 –

回答

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 } 
+0

如果我刪除第一行,該怎麼辦? window.msg的值將是未定義的。但應該看到變化? – d11

+0

@ doomday1然後'b'將永遠是'undefined'。關鍵是變量'msg'和'b'是相互獨立的。給一個值賦值不會影響另一個值。但是,如果它們都引用* same *對象,那麼當您通過一個變量操作該對象時(例如'msg.a = 1',如* Doge *的答案),您可以通過查看其他變量;即,雖然變量*本身*是獨立的,但是引用的對象是相同的。 –

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

相關問題