zoukankan      html  css  js  c++  java
  • 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(事件循环)






  • 相关阅读:
    HTML引入文件的绝对路径、相对路径、根目录
    测试脚本中的等待方法:
    MVC、MTV、FBV、CBV、母版和继承:
    多窗口处理周杰伦:
    登录测试函数版:
    登录测试:
    hibernate配置详情1(hibernate.cfg.xml)
    常用数据库连接串与驱动总结
    常用数据库连接串与驱动总结
    常用数据库连接串与驱动总结
  • 原文地址:https://www.cnblogs.com/wzndkj/p/10217819.html
Copyright © 2011-2022 走看看