• 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异步请求

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

  • 相关阅读:
    php去除数组中重复值,并返回结果!
    SignalR 2 入门
    SignalR支持的平台
    SignalR简介
    作业调度系统quartz.net
    Oracle安装心得
    maven的项目目录解析
    web.xml的<url-parttern>的匹配规则
    Web.xml中四种验证方式
    Web.xml
  • 原文地址:https://www.cnblogs.com/bigharbour/p/11976011.html
Copyright © 2020-2023  润新知