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

    入栈与出栈

    解答:栈是先进后出

  • 相关阅读:
    ReactiveCocoa 谈谈RACMulticastConnection
    ReactiveCocoa 谈谈concat
    Swift 一些环境配置
    hpple 简单使用
    Swift 学习手记1,pod 的 类库使用
    [转]SQL语句:Group By总结
    Jquery VailDate初探
    C#RSA加密解密详解
    电子印章制作管理系统 -升级版本
    tensorflow 实现的第一个目标检测模型
  • 原文地址:https://www.cnblogs.com/cindy-hmy/p/10197055.html
Copyright © 2011-2022 走看看