zoukankan      html  css  js  c++  java
  • 事件循环机制

    解答: console.log()是同步任务(即可以立即执行的任务),setTimeout是异步任务(不会立即执行的事件任务)。

    常见的异步操作:

    • Ajax
    • DOM的事件操作
    • setTimeout
    • Promise的then方法
    • Node的读取文件

    异步任务分为宏任务和微任务:

    宏任务:script(全局任务), setTimeout, setInterval, setImmediate, I/O, UI rendering

    微任务:process.nextTick, Promise.then(), Object.observe, MutationObserver

    所以,对以上的解析是:

    • 从全局任务入口,首先打印日志 1
    • 遇到宏任务 setTimeout,交给异步处理模块,我们暂且先记为 setTimeout1
    • 再次遇到宏任务 setTimeout,交给异步处理模块,我们暂且先记为 setTimeout2
    • 顺序执行,打印日志 4
    • 此时同步任务已执行完毕,读取宏任务队列的任务,先执行 setTimeout1的回调函数,因为定时器的等待时间为 0秒,所以会直接输出 2,但是 W3C在 HTML标准中规定,规定要求 setTimeout中低于 4ms的时间间隔算为 4ms
    • 由于浏览器在执行以上三步时,并未耗时很久,所以当宏任务 setTimeout1执行完时, setTimeout2的等待时间并未结束,所以在 2秒后打印日志 3,实际上并未等待2秒。

    入栈与出栈

    解答:栈是先进后出

  • 相关阅读:
    微信公众号开发的时候code失效的问题
    微信公众平台测试号通过网页授权获取用户的信息
    做了一些mysql的习题 感觉用来应付面试是足够了
    springMVC在使用重定向跳转
    jsp获取标签数据
    再来一次atm机 用文本做的
    django mysql数据库配置
    django url控制器
    django初始要做的事情
    flask学习
  • 原文地址:https://www.cnblogs.com/cindy-hmy/p/10197055.html
Copyright © 2011-2022 走看看