js--事件循环
2023-09-27 14:26:50 时间
- 微信扫码关注公众号 :前端前端大前端,追求更精致的阅读体验 ,一起来学习啊
- 关注后发送关键资料,免费获取一整套前端系统学习资料和老男孩python系列课程
- 学习资源推荐 https://blog.csdn.net/qq_42813491/article/details/90213353
理解
1.所有同步任务都在主线程上执⾏,形成⼀个执⾏栈。
2.主线程之外,还存在⼀个任务队列,存放异步事件,只要异步任务有了运⾏结果,就在任务队列之中放置⼀个事件。
3.⼀旦执⾏栈中的所有同步任务执⾏完毕,系统就会读取任务队列,将队列中的事件放到执⾏栈中依次执⾏。
4.主线程从任务队列中读取事件,直到所有任务执行完毕
任务栈
被主线程读取并执行的每个任务,就是任务栈
任务队列
任务队列与任务栈不同吗,它处理的是异步事件,主线程优先读取任务栈同步任务,遇到异步任务将其放入任务队列,继续向下执行。当任务队列处理的异步事件有了结果后,主线程会再度读取任务队列中的回调函数。
调用实例
let a = () => {
console.log('a--start')
setTimeout(() => {
console.log('异步任务a完成')
}, 0)
console.log('a--end')
}
let b = () => {
console.log('b--start')
setTimeout(() => {
console.log('异步任务b完成')
}, 0)
console.log('b--end')
}
let c = () => {
console.log('c--start')
setTimeout(() => {
console.log('异步任务c完成')
}, 0)
console.log('c--end')
}
a();
b();
c();
- 先执行同步任务,异步任务放入任务队列,当所有同步任务执行结束,依次执行任务队列中的异步任务,先进先出
宏任务/微任务
- 宏任务(macrotask):
- script(整体代码)、setTimeout、setInterval
- 微任务(microtask):
- Promise、process.nextTick(Node.js环境)
- 执行顺序,先宏后微
- 注意,放入队列是先宏后微,但是再取出来的时候是先微后宏,这两个存在的事件队列是不一样的
面试题
setTimeout(function () {
console.log(1);
});
new Promise(function(resolve,reject){
console.log(2)
resolve(3)
}).then(function(data){
console.log(data);
})
console.log(4);
//2 4 3 1
// 宏任务
setTimeout 异步
console.log(2) 同步
console.log(4) 同步
//微任务
Promise,then 异步
相关文章
- vue.js--基础 事件结合双向数据绑定实现todolist,增加和删除功能
- vue - src for components || router(index.js)
- JS单元测试框架:QUnit
- js 自定义事件 包含 添加、激活、销毁
- 下课倒计时【原生 JS 实现 可直接复制粘贴运行】
- Node.js创建服务器
- JS leetcode II. 左旋转字符串 题解分析
- js 数组
- 一篇常做错的经典JS闭包面试题
- (3)打鸡儿教你Vue.js
- JS——BOM概述、window常见事件、定时器、JS执行机制
- js insertBefore
- js 事件点击 显示 隐藏
- JS: javascript 点击事件执行两次js问题 ,解决jquery绑定click事件出现点击一次执行两次问题
- 关于.eslintrc.js代码检测的一些配置
- js实现冒泡事件,点击ul给子标签添加相同事件和阻止冒泡事件
- 浅析Node.js的宏任务与微任务、本轮与次轮循环、事件循环概念及其6个阶段解析以及代码分析nodejs与浏览器的Event Loop差异
- JS中的单线程与多线程、事件循环与消息队列、宏任务与微任务
- Node.js:创建应用+回调函数(阻塞/非阻塞)+事件循环
- js如何给ul的所有的li绑定事件,打印他们的索引
- js禁用tab键Enter键
- js 自定义事件
- JS编辑器获取选择内容的HTML多浏览器兼容性写法(支持Chorme、Firefox)
- JS学习第11天——函数进阶(this指向、严格模式、高阶函数、闭包、递归)
- JS学习第7天——移动端特效(触屏事件touch、classList属性、轮播图、click延时解决方案、常用开发插件和开发框架)
- JS学习第4天——Web API之DOM(事件高级)【注册/删除事件、DOM事件流、阻止事件冒泡、事件委托、常用的鼠标/键盘事件】
- js判断手指的上滑,下滑,左滑,右滑,事件监听
- 动态引入Js文件