簡體   English   中英

如何從setTimeout調用匿名函數

[英]How to call an anonymous function from setTimeout

我有一個循環,一個setTimout和一個回調。 我需要使用匿名函數來使變量在回調中保持正確。

我想將回調作為一個單獨的函數,因為它太大而無法循環。

這不起作用:

for (var i = 0; i < 10; i++) {
  setTimeout(callback, 1000*i, i);
}

var callback;
(callback = function(i) {
  console.log(i);
})();

如何定義可以從setTimeout調用的匿名函數?

看來您不需要什么比這更復雜的了:

 function callback(i) { console.log(i); }; for (var i = 0; i < 10; i++) { setTimeout(callback, 1000*i, i); } 

您有兩個問題:

  • 在定義callback之前,您曾嘗試使用callback
  • 您將函數包裝在IIFE中(沒有明顯的原因),這意味着它將使用undefined參數調用一次。

如果我正確理解,在我看來,將setInterval()setTimeout()結合使用for循環更合乎邏輯。

我在示例中使用閉包創建了一個回調函數來跟蹤計數器變量:

 function init() { var increment = initCounter(); setInterval(function() { console.log(increment()); }, 1000); } function initCounter() { var i = 0; return function() { return ++i; } } init(); 

只需將for循環放在函數表達式之后即可。

這是遵循您的方法。

 var callback; (callback = function(i) { if (i !== undefined) console.log(i); })(); for (var i = 0; i < 10; i++) { setTimeout(callback, 1000, i); } 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

使用函數聲明的更好方法:

 function callback(i) { console.log(i); }; for (var i = 0; i < 10; i++) { setTimeout(callback, 1000, i); } 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

使用ES6箭頭功能

 let callback = (i) => { console.log(i); } for (var i = 0; i < 10; i++) { setTimeout(callback, 1000, i); } 

我遺漏了一些東西,您的問題是如何調用匿名函數,但是每個答案(包括您自己的問題)都包含命名函數。

有什么問題:

for (var i = 0; i < 10; i++) {
  setTimeout(function(m) { console.log(m); }, 1000*i, i);
}

暫無
暫無

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

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