当其他数组传递给函数时,AS2 数组会发生变化吗?

AS2 array gets changed when other array is passed to function?

我正在构建黑白棋 AI 并 运行 解决一个奇怪的 AS2 问题。

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

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

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

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 天,但仍然不知道哪里出了问题以及如何解决它?

非常感谢任何想法!

发生这种情况是因为您实际上修改了原始数组,而不是使用它的浅拷贝。

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

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

    return result;
}