簡體   English   中英

jQuery函數-第二次調用時,不接收新數據,使用舊的嗎?

[英]Jquery function - When called second time, not receiving fresh data, uses old?

我在多次調用一個函數時遇到麻煩。 每次我調用它時,它都應該接收到新數據(即使它與先前的數據相同),但是以某種方式,下一次調用該函數將產生第一次調用該函數的預期輸出。

編碼:

$.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/ )並打開控制台logger / devtools,您會看到我正在打印出與該函數一起傳遞的數組的內容,然后再執行數組。 下次調用該函數時,將與第一次調用該函數時相同的數組(arr)傳遞給該函數,因此我希望開始時的console.log可以從該數組中打印出相同的內容。 但是,現在數組保留了所有內容,除了索引2之外,在我使用console.log打印出來后,將其修改為“”。 如果這是另一種方法,我會得到它(for循環后有console.log),但是現在我很困惑!

那我在做什么錯?

更改

console.log(arrayName);

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

您將看到您的期望。 控制台[取決於狀態]在當前記錄該對象/數組時,不會顯示該對象/數組的快照,有時會存儲對其的引用,因此它將具有當前值。

這是因為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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM