• JS执行机制


    同步——一件事做完之后才能干下一件事,效率低;

    异步——同时开始干多件事;

    JS是单线程执行的,即同步执行,因为前端面对的问题是与用户的交互,若是同时获取事件,比如若是对获取到的同一节点需要作不同操作,会乱套,因此JS是单线程的。但是,如果一直都是同步执行,等一件事做完再去做另一件事,无疑非常耗时,用户体验会很差,因此,又需要JS去异步执行某些操作。

    JS中常见异步编程方式有:

    1、回调函数——解决异步编程最基本的方法

    2、发布订阅、通知

    3、事件监听

    4、ES 6: Promise

    5、ES 7: * async和await

    经典面试题:

        for(var i=0;i<5;i++){
            console.log(i);  //0 1 2 3 4
        }
        for(var j=0;j<5;j++){
            setInterval(function () {
                console.log(j);   //5 5 5 5 5 5.....
            },1000)
        }
        for(var j=0;j<5;j++){
            setTimeout(function () {
                console.log(j);   //=>5 5 5 5 5
            },1000)
        }

    会出现上述结果的原因在于for是同步事件,setTimeout是异步事件,同步事件先执行,异步事件则被放入队列里等待执行。等for执行完,j已经变成了5。

    //解决方案1,闭包,实时保存一个j给setTimeout
        for(var j=0;j<5;j++){
            (function(j){
                setTimeout(function () {
                    console.log(j);   //=>0=>1=>2=>3=>4
                },1000)
            })(j);
        }
        //解决方案2,let
        for(let j=0;j<5;j++){
            setTimeout(function () {
                console.log(j);   
            },1000)
        }
  • 相关阅读:
    每日总结
    体温登记app(大年初一要收的作业)慢慢更,这个写完了
    2021/01/31周学习总结
    2021/01/24周学习总结
    从小工到专家
    构建之法阅读笔记
    2021/01/17周学习总结
    人月神话阅读笔记
    利用Word制作Kindle用的6寸PDF电纸书
    面试题-谈谈封装和抽象的区别(转)
  • 原文地址:https://www.cnblogs.com/wenzizaigaoge/p/10513004.html
Copyright © 2020-2023  润新知