zoukankan      html  css  js  c++  java
  • js-运行机制

    JS是单线程的,因此同一时间只能干一件事。

    任务队列中包含同步任务和异步任务,异步任务要挂起;同步任务执行完才会去执行异步任务

    Event Loop事件循环:运行栈运行的是同步任务。浏览器识别了事件是一个异步任务,就不会把它放在运行栈里,而是拿走。拿走了之后也不是立马放在异步队列中,而是当同步任务执行完以后,再放入异步队列。如果运行栈里没有任务了,就开始执行异步任务。执行完后如果运行栈里没有任务了,再监听异步队列,这个循环的过程就是EventLoop。

    什么时候会开启异步任务?

    1. setTimeout,setInterval
    2. DOM事件
    3. ES6中的promise
    setTimeout(function () {
        console.log('setTimeout');
    },0);
    console.log('Hi');
     
    //输出结果
    Hi
    setTimeout
     
    /*
    *setTimeout是异步任务,会在console.log('Hi');执行之后才执行
    */
    

    关于async await promise setTimeout的执行顺序:

    • promise优先于setTimeout
    • promise创建后会立即执行
    • await后面的函数执行完毕后才会让出线程
    async function async1(){
      console.log('async1 start')
      await async2()
      console.log('async1 end')
    }
    async function async2(){
      console.log('async2')
    }
    console.log('script start')
    setTimeout(function(){
      console.log('setTimeout')
    },0) 
    async1();
    new Promise(function(resolve){
      console.log('promise1')
      resolve();
    }).then(function(){
      console.log('promise2')
    })
    console.log('script end')
     
    //输出结果
    script start
    async1 start
    async2
    promise1
    script end
    promise2
    async1 end
    setTimeout
    

    参考:https://segmentfault.com/a/1190000015057278?utm_source=index-hottest

  • 相关阅读:
    android数据恢复
    UVA 690 Pipeline Scheduling
    2017 国庆湖南 Day4
    2017 国庆湖南 Day5
    2017 国庆湖南 Day6
    2017国庆 清北学堂 北京综合强化班 Day1
    2017 国庆湖南Day2
    bzoj 2962 序列操作
    UVA 818 Cutting Chains
    UVA 211 The Domino Effect
  • 原文地址:https://www.cnblogs.com/ajaemp/p/13940709.html
Copyright © 2011-2022 走看看