js异步,同步及宏任务和微任务理解

保持对代码的热爱并保持怀疑态度

异步同步概念

  1. 异步:多个程序同时执行
  2. 同步:每个程序不同时执行
  3. 程序:功能
  4. 进程:一个功能的开始执行到执行结束的过程
  5. 线程:一个功能在执行过程中的每一个分支,多线程异步执行,线程越多执行速度越快,但需要消耗大量性能

同步现象

就比如这个 看实例:

    alert(1);
    alert(2);
    alert(3);
    alert(4);
    alert(5)

alert弹出会阻塞程序执行,当你不点击确认的时候,他便不会执行后面的代码,当你点击后才会执行下一行代码,一个接一个执行,这就是同步。

异步现象

看实例

计时器

    var a = 10;
     setTimeout(() => {
         a = 20;
     }, 1000);
     console.log(a);

计时器就是个异步,同时执行。这里只会输出10,因为不是同步执行先10,一秒后再变成20。

循环中的事件,事件中获取循环的变量

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <ul id="ali">
    <li>1</li>
    <li>2</li>
    <li>3</li>
  </ul>
</body>
<script>
  var ali=document.querySelectorAll("#ali li")

        for(var i=0;i<ali.length;i++){  //for循环不会等待,所以点击执行只会拿到最后一个索引
        ali[i].id=i;  //提前保存id'
        console.log(ali[i].id)
        ali[i].onclick = function(){
            console.log(i);
            //console.log(this);
        }
    }
</script>
</html>

这里的意思是遍历ali,每次点击的时候打印出索引,但是因为是异步执行,所以会导出每次点击拿到永远是最后一个索引。
解决方法:
用this指向当前对象:可以获取到 当前对象
想要获取到索引的话可以提前保存索引 例:ali[i].id=i

js的宏任务和微任务

  • 是一种人们定义的执行名字
  • javascript是一门单线程异步的编程语言
  • js单线程,通知只能执行一个程序,先执行宏任务上的程序,结束后,才开始执行微任务

宏任务和微任务图(Marco宏任务,Micro微任务)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

划水的乌贼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值