• js运行机制


    1、
    console.log(1);
    setTimeout(function(){
        console.log(2);
    },0)
    console.log(3)
    打印顺序:132

    为什么是1,3,2

    js是单线程,同一时间只能做一件事,setTimeout是个异步任务,异步任务要挂起,放到任务队列,不立即执行,等同步任务处理完之后,再去处理异步任务



    2、
    console.log('A');
    while(true){
    
    }
    console.log('B');
    打印出:A
    因为一直在循环,同步任务一直在执行,一直没执行到B
    3、
    console.log('A');
    setTimeout(function(){
        console.log(2);
    },0)
    while(true){}
    因为while这个同步任务一直没执行完,执行不到异步队列
    4、
    for(var i=0; i<4; i++) {
      setTimeout(function(){
        console.log(i)
      },1000)
    }
    打印出:4 4 4 4
    因为for循环是个同步任务,遇到setTimeout,这个时间是1000,定时器会记住这个语句,但是他并没有去执行,i就+1了,这个时候还没有执行,交给了定时器了,for循环执行完了,到时间了,定时器会把这个setTimeout扔到异步队列中,这个时候就开始执行了。
     
    5、什么是EventLoop(事件循环)
    一开始浏览器遇到setTimeout,然后交给了定时器,定时器先自己留着,然后等同步任务执行完后,这个setTiemout扔到了异步任务,然后按顺序放到运行栈中执行,运行栈执行完,再去拿异步任务,这个不断循环的过程,就是eventloop(事件循环)






  • 相关阅读:
    导热硅胶片的特性
    电子器件热设计估算技巧 1
    什么是热阻
    功率器件的热设计
    ESP8266EX 电路设计
    STM8S005 ADC采集 5位共阴数码管显示
    PCB设计-Allegro软件入门系列第九讲-Class分类和Subclass应用
    STM32 滴答时钟 SysTick 的使用 STM32F103C8T6
    SPI 串行Flash闪存W25Q128FV 的使用(STM32F407)_基础篇
    如何居中一个元素
  • 原文地址:https://www.cnblogs.com/wzndkj/p/10217819.html
Copyright © 2020-2023  润新知