美文网首页
对循环中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