首页 > 其他分享 >Ajax---EventLoop事件循环

Ajax---EventLoop事件循环

时间:2022-11-20 19:45:59浏览次数:45  
标签:浏览器 log 队列 EventLoop 任务 --- Ajax console

前言
       JavaScript 是一门单线程执行的脚本语言。也就是说,同一时间只能做一件事情。

       JavaScript要运行在宿主环境中(浏览器,nodejs)下。浏览器内部有执行js代码的引擎.

提示:以下是本篇文章正文内容,下面案例可供参考

一、理解浏览器中的EventLoop(事件循环)的概念

浏览器的事件循环

 

 

 

排队是 任务是以事件及其回调的方式存在的。当事件(用户的点击,图片的成功加载)发生时,将其回调添加到任务队列;主线程上的任务完成之后,就会从任务队列中取出任务来执行.

浏览器中的EventLoop事件循环:

        js是单线程的,一次只能做一件事。js在浏览器这个宿主环境中运行。浏览器是多线程的,用户交互,定时器,网络请求等等浏览器中的事件会产生对应的任务,任务多了要在任务队列中排队,浏览器的主线程依次取出任务来执行,此过程不断重复从而形成一个循环,称为EventLoop.

二、异步代码的执行过程
        代码又为同步代码和异步代码,事件循环中先执行同步代码,并输出结果;遇到异步代码之后,交由浏览器(宿主环境)处理 ===> 事件触发之后进入到任务队列;继续执行后续代码;主线程空闲时,从任务队列中取出任务继续执行.

<script>
console.log(1)
setTimeout(()=>{
console.log(2)
}, 2000)
console.log(3)
</script>

 

 


三、微任务和宏任务
1.了解微任务和宏任务的概念

微任务代码(js语法)

        Promise对象.then()
宏任务代码(宿主环境)

      (1)script
      (2)dom事件
      (3)ajax
      (4)setTimout
2.掌握微任务队列和宏任务队列的执行时机

       异步任务,不是马上执行,是放入到队列中等待;如果所有的任务都要按序等待,那么也不行,需要有一个能插队的机制。所以又将异步任务分为微任务和宏任务,同时对应微任务队列和宏任务队列。当主线程空闲时,先执行微任务队列中的任务,再去执行宏任务队列中的任务。

console.log(1);
setTimeout(() => {
console.log(2);
}, 0)

let p = new Promise((resolve, reject) => {
resolve(3)
})
p.then(res => {
console.log(res);
})
console.log(4);

微任务和宏任务以及同步代码是如何执行的?

       先执行第一个宏任务(<script>), 然后同步任务, 然后微任务, 然后下一个宏任务如此循环, 直到所有代码执行完毕

总结
       EventLoop事件循环: js是单线程的,一次只能做一件事。js在浏览器这个宿主环境中运行。浏览器是多线程的,用户交互,定时器,网络请求等等浏览器中的事件会产生对应的任务,任务多了要在任务队列中排队,浏览器的主线程依次取出任务来执行,此过程不断重复从而形成一个循环,称为EventLoop.

标签:浏览器,log,队列,EventLoop,任务,---,Ajax,console
From: https://www.cnblogs.com/bunani/p/16909301.html

相关文章

  • k8s源码分析3-kubectl命令行设置7大命令分组
    本节重点总结:设置cmd工厂函数f,主要是封装了与kube-apiserver交互客户端用cmd工厂函数f创建7大分组命令,如下基础初级命令BasicCommands(Beginner):基础中级命......
  • P7163 [COCI2020-2021#2] Svjetlo
    题意给你一棵点权是\(0/1\)的树,你可以从任意一点开始,走到任意一点结束,每到达一个点,都要翻转当前的点权。给定初始的点权,求使得整棵树的点权都变成\(1\)的最短路径长度......
  • MIFARE Plus-X和MIFARE Plus-S的区别
    MIFAREPlus-X和MIFAREPlus-S的区别mingdu.zhengatgmaildotcomMIFAREPlus-X和MIFAREPlus-S的特性特性MIFAREPlus-XMIFAREPlus-SSL2支持不支持SL3值操作支持不支持S......
  • 2022-2023-1 20221329 《计算机基础和程序设计》第十二周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12作业目标:学习《C语言程序设计》第11章......
  • Go-netpoll
    Go-Netpoller模型Gonetpoll核心Gonetpoll通过在底层对epoll/kqueue/iocp的封装,从而实现了使用同步编程模式达到异步执行的效果。总结来说,所有的网络操作都以网络......
  • 2022-2023-1 20221312 《计算机基础与程序设计》第十二周学习总结
    班级链接:首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园(cnblogs.com)作业要求:2022-2023-1《计算机基础与程序设计》教学进程-娄......
  • day51(监听器,ajax)
    web监听器第一种监听(1).实现HttpSessionBindingListener接口(2).重写相关方法注意:在哪个类中实现了该接口,就会监听哪个类当这个类对象被设置session中时,会......
  • NB-IoT和LoRa的前景分析
    在中国,一定是NB-IoT唱主角,LoRa唱配角。mingdu.zhengatgmaildotcomNB-IoT唱主角,LoRa跑龙套在中国,一定是NB-IoT唱主角,LoRa跑龙套。不是因为技术原因,而是因为政治原因。NB-......
  • 学习Cortex-M:三种关中断方式
    1、关闭整个CPU的所有中断;2、关闭特定外设的所有中断;3、关闭特定外设的特定中断源。mingdu.zhengatgmaildotcom1、总开关每个CPU有一个中断总开关。通过CPU中断控制寄存......
  • lwIP协议栈timeouts->next->time赋值导致BusFault异常的解决办法
    所有调用了lwIPAPI的线程都应该使用lwIP的sys_thread_new来创建。mingdu.zhengatgmaildotcom解决办法所有调用了lwIPAPI的线程都应该使用lwIP的sys_thread_new来创建......