Jquery函数 - 当第二次调用时,没有接收到新数据,使用旧的?

时间:2014-03-31 14:44:32

标签: javascript jquery arrays function

我在使用多次呼叫功能时出现问题。每当我调用它时,它应该接收新数据(即使它与之前的相同)但不知何故,下一次调用该函数将导致第一次调用函数时的预期输出。

代码:

$.calc=function(arrayName){
    console.log(arrayName);
    for(i=0;i<arrayName.length;i++){
        if(i==2){
            arrayName[i]="";
        }
    }
}

var arr=new Array();
arr[0]="saab";
arr[1]="saab";
arr[2]="saab";
arr[3]="saab";
arr[4]="volvo";
arr[5]="volvo";

//First run
$.calc(arr);

//Second run
$.calc(arr);

如果您运行代码(http://jsfiddle.net/76bme/)并打开控制台记录器/ devtools,您可以看到我打印出与该函数一起传递的数组的内容,然后执行任何操作阵列。 下次我调用函数时,我将相同的数组(arr)传递给函数,就像第一次调用函数一样,所以我希望console.log在开头打印出来自数组的相同内容。但是现在数组除了在索引2处之前保存了所有内容,我将其修改为&#34;&#34;我用console.log打印出来之后。如果是另一种方式我会得到它(在for循环之后有console.log)但是现在我只是困惑了!?

那么我做错了什么?

2 个答案:

答案 0 :(得分:0)

更改

console.log(arrayName);

console.log(arrayName.join(";"));

你会看到你的期望。控制台[取决于状态]在记录的当前时间不显示对象/数组的快照,有时它会存储对它的引用,因此它将具有当前值。

答案 1 :(得分:0)

这是因为arrayName是对数组对象的引用。因此,当您更改该对象中的某些内容时,您的arr也会受到影响。如果您不想要这种行为,您需要创建一个副本&#34;你的阵列:

$.calc=function(arrayName){
    console.log(arrayName)
    var myArr = Array.prototype.slice.call(arrayName); //Just here!
    for(i=0;i<myArr.length;i++){
        if(i==2){
            myArr[i]="";
        }
    }
}

小提琴:http://jsfiddle.net/76bme/5/