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(事件循环)






  • 相关阅读:
    静态库中的静态变量连接失败的解决
    (转)Virtual PC 2007虚拟网络设置
    (zt)iPhone Developer注册
    (zt)正则表达式30分钟入门教程
    (zt)Flex SDK 3.2和Flex Builder 3.0.2升级
    (转)完成端口之性能优化
    (摘)法拉利年代型号
    安装windows下的NDS开发环境
    [C#]小问题
    javascript "未结束字符串"
  • 原文地址:https://www.cnblogs.com/wzndkj/p/10217819.html
Copyright © 2011-2022 走看看