美文网首页
知识点整理之---异步和单线程及JS运行机制

知识点整理之---异步和单线程及JS运行机制

作者: 楠楠_c811 | 来源:发表于2019-05-28 11:19 被阅读0次
    什么是单线程?

    js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行。

    JS为什么是单线程?

    因为JS要操作DOM,无法在避免避免冲突的情况下同时对一个DOM节点做两种或更多操作,因此设计之初,就设计为单线程。

    什么是同步?

    同步 --> 简单来说, JS就是一个一根筋,做着当前的这件事情,没有完成之前,绝对不会做下一件事情。这种运行方式就叫同步。

    什么是异步?

    异步 --> 规划要做一件事情,但是不是当前立马去执行这件事情,需要等一定的时间,这样的话,我们不会等着他执行,而是继续执行下面的操作。

    为什么会有异步?

    前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。所以,浏览器为这些耗时任务开辟了另外的线程,所以才有了异步概念。

    JS是如何实现异步的?

    JS是通过事件循环(event loop)来实现异步的。

    什么是Event Loop? 它和JS的执行机制有什么关系?

    首先判断JS是同步还是异步,同步就进入主进程,异步就进入event table
    异步任务在event table中注册函数,当满足触发条件后,被推入event queue
    同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看是否有可执行的异步任务,如果有就推入主进程中
    以上三步循环执行,这就是event loop
    只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。

    JS中异步有哪几种情况?

    有四种情况:
    (1)定时器都是异步编程的
    (2)所有的事件绑定都是异步编程的
    (3) Ajax读取数据都是异步编程的
    (4) 回调函数都是异步编程的

    相关文章

      网友评论

          本文标题:知识点整理之---异步和单线程及JS运行机制

          本文链接:https://www.haomeiwen.com/subject/hojrtctx.html