原题:
for(var i = 0; i < 5; i++){
setTimeout(()=>{
console.log(i)
}, i*1000)
}
结果是依次会输出5个5;但是一般我们希望得到的结果是依次输出 0,1,2,3,4
我总结了以下3种解法:
1,es6变量声明
至于var 和let的区别,大家应该都知道,这时候将循环变量使用的声明var 改成 let ,就可以正常得到我们希望的结果
2,闭包
将setTimeout 的延时回调改成这样:
setTimeout(((i)=>{
return ()=>{
console.log(i)
}
})(i), i*1000)
3,bind函数
setTimeout(((i)=>{
console.log(i)
}).bind(i), i*1000)
利用bind将回调变成预设参数的函数
如果还有其他解法,望补充。