美文网首页
对循环中setTimeout执行过程的思考

对循环中setTimeout执行过程的思考

作者: 小龙虾Julian | 来源:发表于2019-10-28 15:49 被阅读0次

知识点:(1)ES6——let定义变量(2)setTimeout延迟执行

let只能声明一次并且声明的变量只在let命令所在的代码块({}包括的区域)内有效
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式
一、setTimeout延时执行

举个栗子1:

alert(1); 
setTimeout("alert(2)", 0); 
alert(3); 

分析:正常情况下JS都是按照顺序执行代码,但是上面的代码执行后一次弹出1、3、2,虽然只是延迟了0ms,但并不代表setTimeout函数不延时执行

实际应用:当我们想让某个语句后边的语句执行结束后再执行本语句时,即可用setTimeout延时0ms来实现

举个栗子2:

for (var i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000 * i);
}

分析:由于setTimeout会延迟执行,所以上面代码的结果是执行循环之后再将里面的函数压入事件队列,又由于 i 是var类型的,由于变量提升,最后的 i 都变成5了,于是最后都打印5(每隔1秒输出一个)

举个栗子3:

for (let i = 0; i < 5; i++) {
    setTimeout(function() {
        console.log(i);
    }, 1000 * i);
}

分析:依次输出0、1、2、3、4(每隔1秒输出一个)

二、阻断setTimeout的延时执行

如果想让代码顺序执行,则可以阻断setTimeout的延时执行——应用立即执行函数

举个栗子4:

 for(var i=1;i<=3;i++){
    setTimeout((function(a){//改成立即执行函数
        alert(a);
    })(i),0);
 }

分析:依次输出1、2、3(没隔1秒输出一个)

相关文章

网友评论

      本文标题:对循环中setTimeout执行过程的思考

      本文链接:https://www.haomeiwen.com/subject/iddbvctx.html