我想在setTimeout()
的循环中调用函数,并将计数器作为参数传递。这就是我的尝试:
<!DOCTYPE html>
<html><body>
<button onclick="timed1()">Display alerts</button>
<script>
function timed1() {
for (i=1; i<4; i++){
setTimeout(
(function(i){ alert(i) })(i), 1000*i
);
}
}
</script>
</body></html>
函数调用使用正确的值完成,但是立即而不是我想要的间隔。我已经阅读了this和this SO问题,但遗憾的是我还没有看到我的情况会发生什么变化。
答案 0 :(得分:1)
如果要将let
的不同值绑定到setTimeout函数
i
function timed1() {
for (let i=1; i<4; i++){
setTimeout(function() {
alert(i)
}, 1000*i)
}
}
timed1()
答案 1 :(得分:1)
表达式(function(i){ alert(i) })(i)
不会返回setTimeout
调用的函数。如果你采用IIFE方式,请务必从中返回一个新函数:
setTimeout((function(i) {
return function() {
alert(i);
};
})(i), 1000 * i);
使用ES2015 +可以实现更好的可读性:
for (let i = 1; i < 4; i++) {
setTimeout(() => alert(i), 1000 * i);
}
答案 2 :(得分:1)
您正在IIFE游泳(立即调用函数表达式)。
您立即调用了您的功能。
setTimeout(
(function(i){ alert(i) })(i), 1000*i
); ^
变量i
的范围已打开,您需要使用let
关键字。
for (i = 1; i < 4; i++) {
^
function timed1() {
for (let i = 1; i < 4; i++) {
setTimeout(
function() {
alert(i)
}, 1000 * i);
}
}
&#13;
<button onclick="timed1()">Display alerts</button>
&#13;
答案 3 :(得分:1)
setTimeout
函数允许您将参数传递给回调函数,如下所示:
function timed1() {
for (i=1; i<4; i++){
setTimeout(alert, 1000 * i, i);
}
}
timed1()
时间之后的任何参数都会传递给回调。