当在js中更改局部数组变量时,全局数组变量的值会更改

时间:2014-02-24 14:04:38

标签: javascript

我将全局变量globalValue的值分配给本地数组localArray。在更改localArray的值时,globalValue也会更改。为什么会发生这种情况,我该如何解决?

    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 个答案:

答案 0 :(得分:5)

您有两个指向一个数组的变量。

要拥有不同的数组,必须克隆第一个数组。这通常使用slice函数完成:

var localArray=globalValue.slice();

但是slice只会复制int索引属性(通常在数组中使用的属性)。你想要的是深度(或非深度)克隆功能。如果需要,简单搜索“javascript深度克隆”会为您提供这样的功能。