我在使用多次呼叫功能时出现问题。每当我调用它时,它应该接收新数据(即使它与之前的相同)但不知何故,下一次调用该函数将导致第一次调用函数时的预期输出。
代码:
$.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)但是现在我只是困惑了!?
那么我做错了什么?
答案 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]="";
}
}
}