js 异步和单线程

来源:互联网 发布:淘宝扣除保证金的规则 编辑:程序博客网 时间:2024/05/21 09:17

1.1.关于异步

//democonsole.log(100);setTimeout(function(){    console.log(200);},1000);console.log(300);
100300undefined200
从上面的例子看到,它的流程并不是:

先打印100,过1s后打印200,然后打印300;

而是:

先打印100,然后打印300,接着1s后打印200;

1.2.对比同步

//democonsole.log(100);alert(200);        //        需要你点击确认console.log(300);
这个例子我们可以看到:先打印100,然后需要你点击确认后再弹出200,最后打印300;

1.3.何时需要异步

  • 有可能发生等待的情况
  • 等待过程不能向alert一样阻塞程序运行
  • 因此,等待的情况需要异步

1.4.前端使用异步的场景

  • 定时任务:setTimeout  setInverval
  • 网络请求:ajax请求、动态<img>加载
  • 事件绑定

2.单线程

//democonsole.log(100);setTimeout(function(){    console.log(200);});console.log(300);
当定时时间为0时,也是100  300  200;

执行过程如下:

  • 执行第一行,打印100
  • 执行setTimeout后,传入set Timeout的函数会被暂存起来,不会立即执行(单线程的特点,不能同时干两件事)
  • 执行最后一行,打印300
  • 所有程序执行完成,处于空闲状态时,会立马看到有没有暂存起来要执行的
  • 发现暂存起来的setTimeout函数无需等待时间,就立即执行