簡體   English   中英

如何將參數傳遞給setTimeout調用中定義的匿名函數?

[英]How to pass parameter to an anonymous function defined in the setTimeout call?

這是我的代碼:

function addRcd2(timeOut){  
  for(var c=0; c less 5; c++){
    var rcdi = "rcd_"+c+"";
    setTimeout(function(){
      $('.tbl1 tbody').append(rcdi);
    },timeOut*c);
  }
}

此代碼的輸出是一個表,其行具有相同的文本rcd_5

我的目標是讓表行具有不同的記錄rcd_1 ,..., rcd_5

有任何想法嗎?

典型地在循環問題中創建函數 傳遞給setTimeout所有閉包都引用了相同的 rcdi變量。 在循環內定義變量與在外部定義變量相同:

var rcdi;
for(var c=0; c < 5; c++){
    rcdi = "rcd_"+c+"";
    // ...
}

這使得你在這里只處理一個變量更加明顯。

您必須引入一個新的范圍,在JavaScript中只能通過函數實現:

function getCallback(val) {
    return function(){
      $('.tbl1 tbody').append(val);
    };
}

function addRcd2(timeOut){  
  for(var c=0; c < 5; c++){
    setTimeout(getCallback("rcd_"+c),timeOut*c);
  }
}

正如您在其他答案中看到的那樣,您也可以使用即時功能 使用您覺得更具可讀性的內容。

function addRcd2(timeOut){  
  for(var c=0; c less 5; c++){
    var rcdi = "rcd_"+c+"";
    setTimeout((function(x) {
      return function(){
        $('.tbl1 tbody').append(x);
      };
    })(rcdi),timeOut*c);
  }
}

暫無
暫無

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

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