# 每隔一秒输出一个数字,从 0 - 5

  • 方法一:闭包
for (var i = 0; i <= 5; i++) {
	((j) => {
		setTimeout(() => {
			console.log(j)
		}, j * 1000)
	})(i)
}
1
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

setTimeout还允许更多的参数。它们将依次传入推迟执行的函数(回调函数)。

setTimeout((a,b,c) => {            
    console.log(a,b,c)        
}, 2000, "my", "name", "is starsion");
//my name is starsion
1
2
3
4
  • 方法三:let命令
for (let i = 0; i <= 5; i++) {
	setTimeout(() => {
		console.log(i)
	}, i * 1000)
}
1
2
3
4
5
Last Updated: 4/12/2020, 3:36:17 PM