JS的同步与异步

JS是单线程的->做着当前的这件事情,没有完成之前,绝对不会做下一件事情
JS中的两种编程思想:同步、异步

同步指下一个程序的执行需要等到上一个程序执行完毕,也就是得出结果后下一个才能执行(JS中大部分都是同步编程的)

     for (var i = 0; i < 100000; i++) {
           if (i == 99999) {
               console.log("循环结束了~~");      //->(1)
           }
       }
       console.log("ok");      //->(2)
    //for循环就是同步编程的,只有循环结束后,才会继续执行下面的代码
       while (1) {
    
       }
       console.log("ok");     //->永远都不会执行的,因为上面的循环是死循环,循环永远都不会结束

异步指的是上一个程序指向后,下一个程序不用等到上一个程序出结果就能执行,等上一个出结果了调用回调函数处理结果就好。

-> JS是属于单线程,我们最好使用异步编程

-> 定时器都是异步编程

-> 事件绑定 异步

-> 回调函数 异步

-> 在AJAX中可以使用异步编程

异步 -> 规划要做一件事情,但是不是当前立马去执行这件事情,需要等一定的时间,这样的话,我们不会等着它执行,而是继续执行下面的操作,"只有当下面的事情都处理完成了,才会返回头处理之前的事情;如果下面的事情并没有处理完成,不管之前的事情有没有到时间,都踏踏实实的给我等着"

       var n = 0;
       window.setTimeout(function () {
           n++;
           console.log(n);//->1 (2)
       }, 1000);
       console.log(n);//->0 (1)

    //->每一个浏览器对于定时器的等待时间都有一个最小的值,谷歌:5~6ms IE:10~13ms,
    //如果设置的等待时间小于这个值,不起作用,还是需要等到最小时间才执行的;尤其是写0也不是立即执行;
       var n = 0;
       window.setTimeout(function () {
           n++;
           console.log(n);//->1 (2)
       }, 0);
       console.log(n);//->0 (1)

    //->我们定时器设置的等待时间不一定就是最后执行的时间,如果定时器之后还有其他的事情正在处理中,不管定时器的时间有没有到,都是不会执行定时器的
       var n = 0;
       window.setTimeout(function () {
           n++;
           console.log(n);//->不执行的
       }, 0);
       console.log(n);//->0 (1)
       while (1) {//->死循环
           n++;
       }
       console.log(n);//->不执行的

       // 例子
       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 < 10000000; i++) {}
       console.log(n);//->0 (2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值