定时器与for循环

301 阅读1分钟
 /*
 *  定时器是异步编程,每一轮循环设置的定时器,无需等定时器触发,继续下一轮循环   
 */
        
 for (var i = 0; i < 10; i++) {
    setTimeout(() => {
        console.log(i); // 输出10次10
    }, 1000);            
}
for (let i = 0; i < 10; i++) {
    // let 存在块级作用域,每一次循环都会在当前作用域中形成一个私有变量 i , 当定时器执行的时候,所使用的 i 就是所处作用域的 i 
    setTimeout(() => {
        console.log(i); // 0---9
    }, 1000);            
}
// 使用闭包 提升函数作用域
for (let i = 0; i < 10; i++) {
    ~ function() {
        setTimeout(() => {
            console.log(i); // 0---9
        }, 1000);
    }(i);       
}