Javascript数组在函数之后更改,而不涉及

Javascript数组在函数之后更改,而不涉及,javascript,arrays,function,Javascript,Arrays,Function,我很困惑。我有一个数组myArray=[2,2,2,1,1],在不知道的情况下,它取数组testArray的值 if(count == 5) { alert("beginn" + myArray[2]); var testArray=testFunction(myArray); alert("middle" + myArray[2]); var testCount=countNumber(testArray); if (testCount = 3){

我很困惑。我有一个数组
myArray=[2,2,2,1,1]
,在不知道的情况下,它取数组testArray的值

if(count == 5) {
    alert("beginn" + myArray[2]);
    var testArray=testFunction(myArray);
    alert("middle" + myArray[2]);
    var testCount=countNumber(testArray);
    if (testCount = 3){
        count = 4;
    }
}
下面是函数:

function testFunction(testArray){
    var minimum=Math.min.apply(Math,testArray);
    var i=0;
    var position=-1;
    for(i;i<testArray.length;i++){
        if(position==-1){
            if(minimum==testArray[i]){
                position=i;
            }
        }
    }
    i = 0;
    for(i; i < testArray.length; i++){
        if(i != position){
            testArray[i] = testArray[i] - 1;
        }
    }

    return testArray;
}
函数testFunction(testArray){
var最小值=Math.min.apply(Math,testArray);
var i=0;
var位置=-1;

对于JavaScript中的(i;i,当您将一个数组对象分配给另一个变量时,您基本上是在分配一个指向原始数组对象的指针。这意味着如果您这样做:

var myArray = [1,2,3,4];
var testArray = myArray;
然后,对testArray所做的任何更改也将对myArray进行,因为它们实际上是同一个数组

要防止更改
myArray
,您需要传递数组的副本:

var myCopy = myArray.slice(0);
var testArray=testFunction(myCopy);

请停止使用那些可怕的德语函数名。它们不仅不是英语,而且太冗长了。(我自己也是德国人,所以这不是“愚蠢的美国人”的抱怨;))这是因为javascript中的数组是通过值传递的,如果要通过值传递,请使用
var testArray=testFunction(myArray.slice());
,另外,缩进代码。(=数组在javascript中不是通过引用传递的吗?这意味着您在这里返回一个数组,但也修改了原始数组,因为这是您从函数中引用的。您不是说
if(testCount==3)
也要注意if(testCount=3)':您正在将值3赋值给testCount变量,而不是检查其值