![](/img/trans.png)
[英]How to make a setTimeout call to same function from within an anonymous function?
[英]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
。 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.