1.前言
每日记录一篇大厂面试题
2.题目
改造下面的代码,使之输出0 - 9,写出你能想到的所有解法
for (var i = 0; i< 10; i++){
setTimeout(() => {
console.log(i);
}, 0)
}
3.解析
js是单线程 定时器属于宏任务 不会阻塞代码执行 所以等到for循环完之后 i已经执行++到10 打印的结果 10遍”10“
// 思路一 利用立即执行函数来保存i的变量值 闭包场景
for (var i = 0; i< 10; i++){
(function(i){
setTimeout(() => {
console.log(i);
}, 0)
})(i)
}
// 思路二 利用let关键字 声明一个作用域被限制在 ”块“ 级中
for (let i = 0; i< 10; i++){
setTimeout(() => {
console.log(i);
}, 0)
}