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秒。

    入栈与出栈

    解答:栈是先进后出

  • 相关阅读:
    懂得拐弯,是人生大智慧!
    人心如落叶
    人生聚散,一切随缘!
    35岁以后你还能干嘛?
    人品好,自带光芒
    有一种心境,叫顺其自然
    304. Range Sum Query 2D
    303. Range Sum Query
    301. Remove Invalid Parentheses
    297. Serialize and Deserialize Binary Tree
  • 原文地址:https://www.cnblogs.com/cindy-hmy/p/10197055.html
Copyright © 2011-2022 走看看