let 的作用域
如图代码
for (var i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
输出结果
为什么不是输出 0 1 2 呢
1.因为settimeout为异步执行,每隔1000秒添加一次执行任务,等待主线for循环任务执行完才开始执行
解决方法
1.使用ES6 语法 let 来声明 i;
for (let i = 0; i < 3; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
输出结果
2.引入自执行函数
for (var i = 0; i < 3; i++) {
(function (i){
setTimeout(function () {
console.log(i);
}, 1000);
}(i));
}
输出结果