【面试常考】我终于明白事件循环(Event Loop)咋肥事了

在说事件循环之前,我们首先要搞清楚以下几个知识点。

  1. JavaScript为什么是单线程的?
    如果js不是单线程的,同时有两个方法操作一个DOM节点,一个做删除任务,一个做修改任务,那么此时浏览器该听谁的???

  2. JavaScript为什么是异步的?
    如果js不是异步的,由于代码的执行是自上而下的,那么如果一行代码需要执行很久,下一行的代码就会被阻塞。对用户来说,就是页面“卡死”,这样的话,用户体验很差。

  3. JavaScript是如何实现异步的?
    JavaScript是通过事件循环(Event Loop),实现异步的。理解了事件循环机制,就理解了JS的执行机制。

  4. 浏览器是多线程的。
    JS是单线程的,但浏览器是多线程的,多个线程相互配合以保持同步。浏览器里的常驻线程有:
    (1)JS线程
    (2)GUI渲染线程
    (3)基本UI事件线程
    (4)定时器线程
    (5)异步ajax线程
    (6)……
    5.JavaScript事件循环机制(Event Loop)
    (1)JS的任务可以分为宏任务(Macro task)和微任务(Micro task)。
    一般的js代码(主线程的整体代码),鼠标事件,键盘事件,ajax请求,setTimeout定时器等都属于宏任务。
    process.nextTick,promise.then()等属于微任务。
    (2)事件循环机制

你可能感兴趣的:(JavaScript)