# 每隔一秒输出一个数字,从 0 - 5
- 方法一:闭包
for (var i = 0; i <= 5; i++) {
((j) => {
setTimeout(() => {
console.log(j)
}, j * 1000)
})(i)
}
1
2
3
4
5
6
7
2
3
4
5
6
7
在上述代码中,我们首先使用了立即执行函数将 i 传入函数内部,这个时候值就被固定在了参数 j上面不会改变,当下次执行 timer 这个闭包的时候,就可以使用外部函数的变量 j,从而达到目的。
- 方法二:使用 setTimeout 的第三个参数,这个参数会被当成 timer 函数的参数传入。
for (var i = 0; i <= 5; i++) {
setTimeout((j) => {
console.log(j)
}, i * 1000, i)
}
1
2
3
4
5
2
3
4
5
setTimeout还允许更多的参数。它们将依次传入推迟执行的函数(回调函数)。
setTimeout((a,b,c) => {
console.log(a,b,c)
}, 2000, "my", "name", "is starsion");
//my name is starsion
1
2
3
4
2
3
4
- 方法三:let命令
for (let i = 0; i <= 5; i++) {
setTimeout(() => {
console.log(i)
}, i * 1000)
}
1
2
3
4
5
2
3
4
5