美文网首页
js同步与异步编程

js同步与异步编程

作者: gaoqizhuhui | 来源:发表于2017-08-04 11:23 被阅读0次

    JS是单线程的:js傻,做着当前的事,没完成之前,绝不会做下一件事。

    JS中的两种编程思想:同步、异步。

    1、同步:

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

    2、异步:

    规划要做一件事情,但是不是当前立刻执行的这件事,需要等一定的时间。但不会一直等着它去执行,而是先继续执行下面的操作,只有当下面的事情都处理完了,才会返回头处理之前的事情;如果下面事情并没有处理完,不管之前的事情有没有到时间,都等着它处理完再去执行。

    在JS中异步编程只有四种情况:
    1、定时器都是异步编程的

    var n=0;
    window.setTimeout(function(){
        n++;
        console.log(n);  //---->1  (第2次)
    },0);
    //每一个浏览器对于定时器的等待时间都有一个最小值,如果设置的等待时间小于这个值,还是需要等到最小时间才执行的,尤其是写0也不是立刻执行
    console.log(n);  //--->0  (第1次)
    

    定时器设置的等待时间不一定就是最后执行的时间,如果定时器之后还有其他的事情正在处理中,不管定时器的时间有没有到,都是不会执行定时器的

    var n=0;
    window.setTimeout(function(){
        n+=2;
        console.log(n);  //---->7  (第4次)
    },20);
    window.setTimeout(function(){
        n+=5;
        console.log(n);  //---->5  (第3次)
    },5);  //两个定时器,先到先得
    console.log(n);  //---->0   (第1次)
    for(var i=0;i<10;i++){}
    console.log(n);   //---->0   (第2次)
    

    2、所有的事件绑定都是异步编程的

    for(var i=0;i<oLis.length;i++){
       oLis[i].onclick=function(){
           tabChange(i);  //不可以直接用  tabChange(i),因为异步编程,先执行完循环,所以i就都是最后的值了(oLis.length-1),这里要替换成this.index(用异步编程思想解释)
       }
    }
    

    3、Ajax读取数据的时候,一般都设置为异步编程
    4、回调函数也是异步编程的

    相关文章

      网友评论

          本文标题:js同步与异步编程

          本文链接:https://www.haomeiwen.com/subject/kslvlxtx.html