2014-02-24 26 views
1

我將全局變量globalValue的值分配給本地數組localArray。在更改localArray的值時,globalValue也被更改。爲什麼會發生這種情況,我該如何解決?本地數組變量在js中更改時全局數組變量的值發生更改

var globalValue=[]; 

    globalValue['firstIndex']=1; 
    globalValue['secondIndex']=2; 
    globalValue['thirdIndex']=3; 
    globalValue['checkIndex']="CHECK"; 

function checkGlobalChange() 
{ 
    var localArray=globalValue; 

    localArray['checkIndex']="CHECKCHANGE"; 

    return true; 
} 

function callCheckFuction() 
{ 
    alert("Global Array checkIndex Value Before Call : "+globalValue['checkIndex']); 
    if(checkGlobalChange()) 
    { 
     alert("Global Array checkIndex Value After Call : "+globalValue['checkIndex']); 
    } 
} 

<html> 
    <body> 
     <input type="button" value="Check" onclick="callCheckFuction()"> 
    </body> 
</html> 
+1

你還應該知道,在JS中有(嚴格地說)沒有關聯數組,並且你在那裏有一個'object'。它應該像這樣定義:'var globalValue = {};' – Andy

回答

4

你有兩個變量對一個陣列指向。

要擁有不同的數組,您必須克隆第一個數組。這通常是使用slice函數來完成:

var localArray=globalValue.slice(); 

slice只會複製INT索引屬性(你通常陣列上使用屬性)。你想要的是一個深層(或不深)的克隆功能。如果你需要它,一個簡單的「javascript深度克隆」搜索會給你這樣一個功能。

相關問題