14、前端经典输出1-10问题
- let
let存在块作用域,每次循环都会在当前块作用域中形成一个私有变量i,每次定时器使用的都是私有变量
for(let i = 0;i < 10;i++){
setTimeout(()=>{
console.log(i)
},1000)
}
- 利用闭包
for(var i = 0;i < 10;i++){
setTimeout(((i)=>{
console.log(i)
})(i),1000)
}
for(var i = 0;i < 10;i++){
(function(i){
setTimeout(()=>{
console.log(i)
},1000)
})(i)
}
- bind预先处理
var fn = function(i){
console.log(i)
}
for(var i = 0;i < 10;i++){
setTimeout(fn.bind(null,i),1000); //用bind预先处理
}