改造下面的代码,使之输出0 - 9,写出你能想到的 所有解法。

103 阅读1分钟

首先先确定输出的是10个10,这是因为js是单线程,先执行循环,var是全局变量会累计,再执行setTimeout

for (var i = 0;i< 10; i++){
    setTimeout(() => {
    console.log(i);
}, 1000)}

最简单的方法就是var改为let,将其变为块级作用域

for (let i = 0;i< 10; i++){
    setTimeout(() => {
    console.log(i);
}, 1000)}

其次是利用 setTimeout 函数的第三个参数,会作为回调函数的第一个参数传入

for (var i = 0; i < 10; i++) { 
    setTimeout(i => { 
        console.log(i);
    }, 1000, i) 
}