zoukankan      html  css  js  c++  java
  • JavaScript的执行机制

    Javascript的执行机制:

    1.理解JS的单线程:

      JavaScript是典型的单线程,这部分比较抽象。计算机的任务执行有单线程,多线程之分。单线程是在同一时刻只能做一件事,多线程就是同一时刻能做好几件事。就像我们去水房打水,假如只有一个水龙头,那就需要排队依次打水;如果有很多个水龙头,那就可以同时好几个人打水。为什么JavaScript是单线程?用户在进行页面信息修改时,只能进行增删改查其中一项,不能同时进行多项。如果用户在更改信息的同时,进行了删操作,浏览器该执行哪一项操作,这会造成后台数据紊乱,为了避免这一问题,JavaScript只能是单线程。这是JavaScript的核心特征,也是保证JavaScript能够正常运行的唯一方式。

    2.任务队列(消息队列)

      单线程就意味着,所有问题都需要排队,前一个任务执行完了,后一个任务才会执行。如果前一个任务执行时间很长,后一个任务就不得不进行等待。为了解决单线程这一问题,将所有任务分为两种:

      1)同步任务

      2)异步任务

      同步任务指的是在主线程上执行的任务,按单线程的规则依次执行任务。当主线程的任务执行完毕后,一部分任务进入任务队列,只有任务队列通知主线程可以执行异步任务了,主线程才会调取异步任务执行。

    3.理解Event Loop

    异步执行的运行机制

      1)所有同步任务都在主线程上执行,形成一个任务栈。

      2)在主线程之外,还存在一个“任务队列”。只要异步任务有了运行结果,就在“任务队列”中放置一个事件。

      3)一旦“任务栈”中的所有同步任务执行完毕,系统就会读取“任务队列”,看看里面有哪些事件。那些队形的异步任务,结束等待状态,进入任务栈,开始执行。

      4)主线程会不断重复执行上面的第三步。

    4.放入异步执行队列的语句

      1)setTimeOut 和 setInterval

      2)DOM事件

      3)ES6中的promise

      4)Ajax异步请求

    每日小结:好好休息,不掉头发

  • 相关阅读:
    java之扩展运算符
    error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义
    MinGW
    Gcc/MinGW/Cygwin/Msys 分别是什么?
    开源项目:windows下使用MinGW+msys编译ffmpeg
    MinGW安装和使用基础教程
    基于UDP高性能传输协议UDT doc翻译(一)
    基于UDT connect连接通信以及文件传输--客户端
    基于UDT connect连接通信以及文件传输--服务端
    FreeSWITCH第三方库(其他)的简单介绍(三)
  • 原文地址:https://www.cnblogs.com/bigharbour/p/11976011.html
Copyright © 2011-2022 走看看