【问题标题】:Jquery function - When called second time, not receiving fresh data, uses old?Jquery 函数 - 第二次调用时,没有接收到新数据,使用旧的?
【发布时间】:2014-03-31 14:44:31
【问题描述】:

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

代码:

$.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 处,我在使用 console.log 将其打印出来之后将其修改为“”。如果是相反的方式,我会得到它(在for循环之后有console.log)但现在我很困惑!?

那我做错了什么?

【问题讨论】:

  • 我在控制台中运行了它,它运行良好。
  • 我收到["saab", "saab", "saab", "saab", "volvo", "volvo"] ["saab", "saab", "", "saab", "volvo", "volvo"]
  • @Seiyria:我希望这两个调用的输出相同,例如:["saab", "saab", "saab", "saab", "volvo", "volvo"] ["saab", "saab", "saab", "saab", "volvo", "volvo"] 对于我的头脑,我用相同的参数调用函数,如果不是,我需要了解我是如何不这样做:/

标签: javascript jquery arrays function


【解决方案1】:

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

$.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/

【讨论】:

  • 谢谢!实际上我对 JS 了解不多,所以我从没想过我正在更改对原始数组的引用。 :)
【解决方案2】:

改变

console.log(arrayName);

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

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

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 2019-09-11
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多