代码
for (var i = 0; i< 10; i++){
setTimeout((i) => {
console.log(i);
}, 1000,i)
}
解题思路
- 使用es6的新关键字let,把作用域固定
- bind
- IIFE,立即执行函数
解法一:let
for (let i = 0; i< 10; i++){
setTimeout(() => {
console.log(i);
}, 1000)
}
解法二:bind
for (var i = 0; i< 10; i++){
setTimeout(((i) => {
console.log(i);
}).bind(null, i), 1000)
}
解法三: IIFE
for (var i = 0; i< 10; i++){
setTimeout(((i) => {
console.log(i);
})(i), 1000)
}