Javascript 试图保持输入参数不变

Javascript 试图保持输入参数不变,javascript,scope,Javascript,Scope,我正在尝试编写一个函数,该函数对数组执行操作,并返回数组的不同副本,而保留原始副本不变。我想我可以通过声明var array2=array然后继续执行数组操作来实现这一点。我做错了什么 以下是我的示例函数: var partition = function(array, p){ var pivot = array[p]; var length = array.length; // make a copy and move pivot to the front va

我正在尝试编写一个函数,该函数对数组执行操作,并返回数组的不同副本,而保留原始副本不变。我想我可以通过声明
var array2=array
然后继续执行数组操作来实现这一点。我做错了什么

以下是我的示例函数:

var partition = function(array, p){
    var pivot = array[p];
    var length = array.length;
    // make a copy and move pivot to the front
    var array2 = array;
    array2[p] = array2[0];
    array2[0] = pivot;
    // partition the array
    var i = 1;
    for (var j = 1; j < length; j++){
        //console.log('i='+i+', j='+j)
        if (array2[j] < pivot) {
            var temp = array2[j];
            array2[j] = array2[i];
            array2[i] = temp;
            i++;
        }
    }
    //console.log('array after partitioning: ' + array)
    // swap pivot
    array2[0] = array2[i-1];
    array2[i-1] = pivot;
    var answer = {array: array2, p: i-1}
    return answer;
};

var array2=array.slice(0)
或仅
array.slice()
将克隆您的数组


您有对该

的引用添加此行而不是
array2=array
,因为它只是创建对
array
的引用,而不是新的array2

 var array2 =array.slice(0); //it will create a new array not the reference.

javascript中的Fiddle

数组和对象是通过引用传递的,而不是通过值传递的。如果不希望保留该引用,则需要执行克隆。
 var array2 =array.slice(0); //it will create a new array not the reference.