js同步和异步

 <script>
        // 同步:指的是代码严格按照书写顺序执行。
        // 至今为止,我们学习过的知识中,只有事件和setInterval、setTimeout不是同步 其它的代码 比如分支判断 循环语句都是同步
        // for (var i = 0; i < 10; i++) {
        //     console.log(i);
        // }
 // 异步:指的是代码不严格按照书写顺序执行
 // 事件属于一种异步, setInterval、setTimeout也属于一种异步
        // var a = 10;
        // setTimeout(function() {
        //     console.log(1);
        // }, 2000);
        // console.log(a);

        // 1 提升
        // 2 给a赋值为10
        // 3 执行setTimeout 
        //  会将第一个参数(函数)交给window并告知: 1000毫秒之后把这个函数还给我 我来执行
        // 因为setTimeout执行完毕 就继续往下走 
        // 4 输出a 也就是10
        // 至此 没有任何后续代码可以执行了
        // 等1000毫秒 时间到之后,浏览器会将之前得到的函数交还给JS JS又有内容可以执行了 所以此时才会输出1

  

// 介绍:JS是单线程,同一时间只能够做一件事情 
// JS的代码执行队列: JS在执行代码的时候,因为它的单线程特点,在某一瞬间只能够做一件事情。
// 因为代码有很多,又因为单线程,所以不能够同时执行多条代码,所以必然要对代码进行先后排序。
// 同步代码会按照书写顺序进行排序。
// 异步代码: 有些任务是耗时很长的,这种情况下,会将代码推迟执行。所以会出现代码的书写位置与执行顺序不一致的情况 这样的代码叫做异步代码。
// setInterval setTimeout的第一个参数属于异步代码
        // var a = 10;
        // setTimeout(function() {
        //     console.log(1);
        // }, 0);
        // for (var i = 0; i < 1000; i++) {
        //     console.log(a);
        // }
        // 以上代码的输出顺序 先输出1000次10 再输出1次1 


        // 理解一下作用域 + 异步
        // for (var i = 0; i < 10; i++) {
        //     setTimeout(function() {
        //         console.log(i);
        //     }, 0);
        // }
        // 问: 以上代码输出多少次 输出什么

        // 解读代码:
        // 1 提升 
        // 2 开始for循环的第一次 i=0; 比较 开启一个延时器 i++
        // 开始for循环的第二次 i=1; 比较 开启一个延时器 i++
        // 开始for循环的第三次 i=2; 比较 开启一个延时器 i++
        // 开始for循环的第四次 i=3; 比较 开启一个延时器 i++  
        // 在某一次的循环时 延时器的时间已到 此时window会将函数交还给JS的执行队列 放入了末尾 因为for循环没有执行完毕,所以不会执行到
        // 开始for循环的第n次 i=n - 1; 比较 开启一个延时器 i++ 
        // ...
        // 开始for循环的最后一次 i = 9 比较 开启一个延时器 i++ 变为10
        // 执行第一个for循环开启的延时器 输出i 此时i为10 
        // 执行第二个for循环开启的延时器 输出i 此时i为10 
        // 执行第三个for循环开启的延时器 输出i 此时i为10 
        // 执行第四个for循环开启的延时器 输出i 此时i为10 
        // 执行第五个for循环开启的延时器 输出i 此时i为10 
        // 执行第六个for循环开启的延时器 输出i 此时i为10 
        // 执行第七个for循环开启的延时器 输出i 此时i为10 
        // 执行第八个for循环开启的延时器 输出i 此时i为10 
        // 执行第九个for循环开启的延时器 输出i 此时i为10 
        // 执行第十个for循环开启的延时器 输出i 此时i为10 
        



    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值