164.js同步与异步编程

JS中的两种编程思想:(JS是单线程的)ajax

JS就是个傻子,脑子一根筋,作着当前的这件事情,没有完成以前,绝对不会作下一件事情编程

1.同步:浏览器

  上一件事情没有完成,继续处理上一件事情,只有上一件事情完成了,才会作下一件事情(JS中大部分都是同步编程的)异步

  for(var i=0;i<10000;i++) {

    if(i == 9999) {

      console.log("循环结束了")
    }
  }

  console.log("ok")

  for循环就是同步编程的,只有循环结束后,才会继续执行下面的代码异步编程

  while(1){}

  console.log("ok")// 永远都不会执行的,由于上面的循环是死迅婚,循环永远都不会结束

2.异步:函数

  首先规划要作一件事情,可是不是当前立马去执行这件事情,须要等必定的时间,这样的话,咱们不会等着它执行,而是继续执行下面的操做,只有当下面的事情都处理完成了,才会返回头处理以前的事情,若是下面事情并无处理完成,无论以前的事情有没有到时间,都踏踏实实的给我等着spa

  在JS中异步编程只有四种状况:线程

    1)定时器都是异步编程的3d

    2)全部的事件绑定都是异步编程的code

    3)ajax读取数据的时候,咱们都设置为异步编程

    4)回调函数也是异步编程的

  每个浏览器对于定时器的等待时间都有一个最小值,谷歌5-6ms,IE10-13ms,若是咱们设置的等待时间小于这个值,也不起做用,仍是须要等到最小时间才执行的;尤为是写0,也不是当即执行的;

  var n = 0;

  window.setTimeout(function(){

    n++;
    console.log(n);
  },0);

  console.log(n);

  咱们定时器设置等待时间,不必定就是最后执行的时间,若是定时器以后还有其余的事情正在处理中,无论定时器的时间有没有到,都是不会执行定时器的

        var n = 0;
        window.setTimeout(function(){
            n++;
            console.log(n);// 不执行
        },0);
        console.log(n);
        while (1) {//->死循环
            n++;
        }
        console.log(n)//不执行       

异步编程:任务队列

var n = 0;
        window.setTimeout(function(){
           n+=2
            console.log(n)
        },20);
        window.setTimeout(function(){
            n+=5
            console.log(n)
        },5);
        console.log(n)
        for(var i = 0; i<10000000;i++){}
        console.log(n)

相关文章
相关标签/搜索