关于6个6问题
所谓时机不同,结果不同~
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
//结果输出6个6
for循环在主线程内,setTimeout是异步方法,在任务队列里面,只有主线程执行完后,任务队列才执行,当for执行结束时候,此时的i值已经是6,所以得到结果是个6。
那么如何输出0-5呢。
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
这是JS后来为新人开发者改变的一个东西。让代码按着新人的思路来实现。
出了上面这种方法能够实现打印0-5 那么还有其他方法吗?
- 可以通过自执行函数来实现
for (var i = 0; i <= 5; i++) {
!(function (j) {
setTimeout(function print() {
console.log(j);
}, 0);
})(i);
}
```
2. 通过setTimeout第三个参数
```js
for (var i = 0; i < 6; i++) {
setTimeout((i) => console.log(i), 0, i);
}