关于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);
}