js---单线程,多线程,任务执行队列,同步,异步

1.单线程,多线程

  JavaScript语言的一大特点就是单线程,
  也就是说,同一个时间只能做一件事所有任务需要排队,
  前一个任务结束,才会执行后一个任务。
  如果前一个任务耗时很长,后一个任务就不得不一直等着。

问题1:为什么JavaScript不能有多个线程呢?这样能提高效率!

答:heml5提出web Worker 允许javascript创建多个线程  
       但是子线程完全受主线程控制,
       且不得操作DOM,所以这个并没有改变javascript单线程的本质

2.任务执行队列顺序与—同步—异步

什么是同步?

答:主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务

什么是异步?

答:不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程

经典例子 — 面试也可以提问哦 ---- 猜下结果

1:
 
   console.log(1);
   setTimeout(function () {
      console.log(2); }, 0);  //0秒执行
   setTimeout(function () {
      console.log(3); }, 1000);
   console.log(4);2:
 
   console.log(1);
   for (var i = 0; i < 10000; i++) {
        //循环1万次
      console.log(i)
   }
   setTimeout(function () {
      console.log(2); }, 0);  //0秒执行
   setTimeout(function () {
      console.log(3); }, 1000);
   console.log(4);

答案:例1: 1 , 4 , 2 , 3
例2: 1 , 循环打印 0-9999 , 4 , 2 , 3

setTimeout 其实就相当于我们平时的异步请求
由 setTimeout(function () { console.log(2); }, 0) 可知虽然是0秒执行但是 js消息队列执行顺序 先同步 -> 异步 及时是0秒执行 也得排在同步后面

列2:同理 就算你前面有1万次循环甚至1亿次都是先执行同步后异步

总结:同步可以保证顺序一致,但是容易导致阻塞;异步可以解决阻塞问题,但是会改变顺序性

你可能感兴趣的:(js,笔记,javascript,es6,html,html5)