打印数字的问题
有如下代码:
1
2
3
4
5
6
7
|
let i = 0
for (i = 0; i < 6; i++){
setTimeout(() => {
console.log(i)
})
}
// 打印结果为 6 6 6 6 6 6
|
???
因为setTimeout
函数总是尽快执行内部的代码,即使你定义时间为0,也是尽快。
多快?在循环执行完毕后再执行内部代码。那当然最后读取到的i的值都是6了,i只有在等于6时才会跳出循环。
打印出每一次的数字?
ES6 块级作用域 let
如果你这样修改:
1
2
3
4
5
6
|
for (let i = 0; i < 6; i++){
setTimeout(() => {
console.log(i)
})
}
// 打印结果为 0 1 2 3 4 5
|
这样就会打印出 0,1,2,3,4,5 了。
当你在循环中使用 let 声明一个变量,那么在每一次循环结束,都会创建一次该变量并记录最新的值 :)
还有什么方法?
调用外部函数
1
2
3
4
5
6
7
8
9
10
11
|
let i = 0
for (i = 0; i < 6; i++){
print(i)
}
function print(i) {
setTimeout(() => {
console.log(i)
},0)
}
// 打印结果为 0 1 2 3 4 5
|