代码打印6个6
let i = 0
for(i = 0; i<6; i++){
setTimeout(() => {
console.log(i)
},0)
}
会出现6个6,因为setTimeout会先执行for循环的事件后再得到i的值;
for(let i=0;i<6; i++){
setTimeout(() => {
console.log(i)
},0)
}
得到是值将会是0,1,2,3,4,5,因为JS在使用for循环和let 一起使用时会在每次循环的时候多创建一个i,存在“{}”中,而不是随着for循环进行变化。
还有其他的方式;
- 方法一:自执行函数
for (var i=0; i<5; i++) {
(function (i) {
setTimeout(() => console.log(i), 1000*i)
})(i)
}
方法二:传址传递
var out = (i) => {
setTimeout (() => console.log(i), 1000*i)
}
for (var i=0; i<5; i++) {
out(i)
}
方法三: Promise.all()方法
var arr = []
var output = (i) => new Promise(res => {
setTimeout(()=>{
console.log(i)
res()
}, 1000*i)
})
for (var i=0; i<5; i++) {
arr.push(output(i))
}
Promise.all(arr).then(()=> console.log(5))
方法四:async await方法
var sleep = () => new Promise (res => setTimeout(res, 1000))
(async function () {
for (let i=0; i<5; i++) {
await sleep()
console.log(i)
}
})()
————————————————
版权声明:本文为CSDN博主「laumlin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39147099/article/details/83830587