我有一个循环,一个setTimout和一个回调。我需要使用匿名函数来保持回调中的变量正确。
我希望将回调作为一个单独的函数,因为它太大而无法在循环中使用。
这不起作用:
for (var i = 0; i < 10; i++) {
setTimeout(callback, 1000*i, i);
}
var callback;
(callback = function(i) {
console.log(i);
})();
如何定义我可以从setTimeout调用的匿名函数?
答案 0 :(得分:1)
看来你不需要比这更复杂的东西:
function callback(i) {
console.log(i);
};
for (var i = 0; i < 10; i++) {
setTimeout(callback, 1000*i, i);
}
你有两个问题:
callback
。undefined
参数调用一次。答案 1 :(得分:1)
如果我理解正确,在我看来,将setInterval()
与setTimeout()
结合使用for循环更合乎逻辑。
我使用闭包创建了一个回调函数来跟踪我的示例中的计数器变量:
function init() {
var increment = initCounter();
setInterval(function() {
console.log(increment());
}, 1000);
}
function initCounter() {
var i = 0;
return function() {
return ++i;
}
}
init();
答案 2 :(得分:1)
只需在函数表达式之后放置for循环。
这是按照你的方法进行的。
var callback;
(callback = function(i) {
if (i !== undefined)
console.log(i);
})();
for (var i = 0; i < 10; i++) {
setTimeout(callback, 1000, i);
}
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
使用函数声明的更好方法:
function callback(i) {
console.log(i);
};
for (var i = 0; i < 10; i++) {
setTimeout(callback, 1000, i);
}
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 3 :(得分:1)
let callback = (i) => {
console.log(i);
}
for (var i = 0; i < 10; i++) {
setTimeout(callback, 1000, i);
}
&#13;
答案 4 :(得分:0)
我遗漏了一些东西,你问的是如何调用匿名函数,但每个答案(包括你自己的问题)都包含了命名函数。
出了什么问题:
bundle update rails