每日一篇,面试题 第一篇 "定时器"

924 阅读1分钟

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)
}

系列文章