题目:
for
循环与setTimeout
的处理
//要求:输出 1 2 3 4 5
//实际:输出 5 5 5 5 5
for (var i = 1; i <= 5; i++) {
setTimeout(function (){
console.log(i)
},1000)
}
解决方法:
let
解决(块作用域)
for (let i = 1; i <= 5; i++) {
setTimeout(function (){
console.log(i)
},1000)
}
等价于:
{
setTimeout(function (){
console.log(1)
},1000)
}
//此处省略部分代码
{
setTimeout(function (){
console.log(2)
},1000)
}
- 利用
setTimeout
的第三个参数
for (var i = 1; i <= 5; i++){
setTimeout(function (j){
console.log(j)
},1000,i) //i就是setTimeout回调函数的参数j
}
- 利用
IIFE
for (var i = 1; i <= 5; i++){
(function (j){
setTimeout(function (){
console.log(j)
},1000)
})(i)
}