• 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)
        }
  • 相关阅读:
    oracle 按关键字排序前几行
    oracle 查看某表的前10行
    linux 7安装部署Redis
    oracle 查看库表状态
    centos 7 启动和关闭zabbix 服务
    oracle 创建用户密码及赋予登录权限
    linux 控制root登录宿主机时间
    centos 更改用户登录宿主机时间
    oracle 查询、创建、删除 数据库用户
    Django基础四之模板系统
  • 原文地址:https://www.cnblogs.com/wenzizaigaoge/p/10513004.html
Copyright © 2020-2023  润新知