2016-01-13 70 views
-1

我學習,因爲有些日子JavaScript,但現在我有我想要的計算原值這樣的後總是設置一個VAR的問題:JavaScript是設置無功到

var Old = [0,0]; 
var New = [0,0]; 

test(); 

function test() { 
    Old = New; 
    New[0] = 0; 
    New[1] = 5; 

    alert(Old + " : " + New); 

    do_some_calculation_stuff(); 
} 

,但我不瞭解爲什麼舊的和新的價值總是立即相同,以及如何解決這個問題。

回答

6

因爲像這樣分配一個數組意味着只分配引用。如果你想的是什麼New淺拷貝,你需要做的是這樣的:

Old = New.slice(0);

以上基本上是這樣做的簡寫形式:

Old = []; 
for (var i = 0; i < New.length; ++i) { 
    Old[i] = New[i] 
} 
+0

達尼特進行訪問時,它也會出現變化。打我10秒鐘... :) – Insomniac

+0

非常感謝,5分鐘內解決的問題:D – Steffen

1

當你分配NewOld,你實際上只是將它分配給數組的引用。此時,兩個變量都指向完全相同的對象。如果您通過參考New修改陣列,則在通過Old