当其他数组传递给函数时,AS2数组会被更改吗?

时间:2015-09-17 12:27:26

标签: arrays loops return actionscript-2 trace

我正在建造一个奥赛罗AI并遇到了一个奇怪的AS2问题。

通过将初始数组(arr_nums)传递给它来设置等于函数返回的临时数组(arr_temp)(timesTen();)。

为什么它也改变了初始数组?

我能找到最简单的方法来重现我的问题:

arr_nums = [0,1,2,3,4,5,6,7,8,9,10];


timesTen = function(deltaArr){
    for(i = 0; i < deltaArr.length; i ++){
        deltaArr[i] *= 10;
    }
    return(deltaArr);
}


test = function(){
    arr_temp = timesTen(arr_nums);
    trace('temp: ' + arr_temp);
    trace('nums: ' + arr_nums);
}

test();

以上代码将跟踪以下内容:

temp: 0,10,20,30,40,50,60,70,80,90,100
nums: 0,10,20,30,40,50,60,70,80,90,100

首选追踪:

temp: 0,10,20,30,40,50,60,70,80,90,100
nums: 0,1,2,3,4,5,6,7,8,9,10

即使我没有传递arr_nums并按如下所示更改测试,它也会生成相同的输出:

test = function(){
    arr_temp = arr_nums;
    arr_temp = timesTen(arr_temp);
    trace('arr_temp: ' + arr_temp);
    trace('arr_nums: ' + arr_nums);
}

现在拼命地尝试,测试和搜索了2天,仍然不知道出了什么问题以及如何修复它?

非常感谢任何想法!

1 个答案:

答案 0 :(得分:0)

这是因为您实际上是通过不使用它的浅层副本来修改原始数组。

timesTen = function(deltaArr){
    var result = deltaArr.slice();

    for(i = 0; i < result.length; i ++){
        result[i] *= 10;
    }

    return result;
}