定时触发线程
setTimeout和setInterval就是在这个线程中运行的,也就是当这两个任务触发后,会放在定时触发线程中执行,不会阻塞JS代码的运行,;
事件触发线程
将满足触发条件的事件放入任务队列,换句话说,就是一些异步的事件满足触发条件后,该任务就会被放到事件触发线程里,等待触发;
异步HTTP请求线程
也就是处理ajax请求的线程,比如实际项目中的接口,再向后台发出请求后,该任务就会被放到这条线程里面,当接口有返回了,那么该任务又会被放到事件触发线程里,等待被触发;
==============================================================
在前端通常而言,异步场景基本只有四种,分别是:**定时器,网络请求,事件绑定,ES6 Promise,**这几种情况基本覆盖了前端绝大多数的异步场景,以定时器为例,具体看一下当一个定时器触发后,大致的机制;
简介
定时器是前端较为常用的一个函数功能,当一个定时器触发后,大致上会进行如下流程:
-
主线程也就是我们说的JS引擎线程,主线程会遍历Event Loop,来判断是否有异步任务已经就绪,需要执行;
-
web API可以理解成浏览器提供的一种能力,setTimeout就是一种延迟触发的能力,在主线程中调用了这种能力;
-
定时器线程:调用了setTimeout之后,这个任务就会被放到定时器线程;
-
事件触发线程当定时器结束之后,那么这个事件会转交到事件触发线程中;
-
任务队列触发线程最终会将这个任务放置到任务队列中;
执行过程
先看一段代码:
console.log(“1”);
setTimeout(()=>{
console.log(2);
},2000)
console.log(3)
这段代码是一个最简单的定时器
使用流程图来解释上面那段定时器代码:
-
执行console.log(1),这是一个同步任务,入栈
-
执行console.log,出栈,打印了1;
-
执行了setTimeout函数,但是发现这个web api,因此先调用了web api;
-
通知定时器触发线程,定时2秒后触发;
-
执行console.log(3),这是一个同步任务,入栈;
-
执行console.log,出栈,打印了3;
-
这时候执行栈空了,就要去检查任务队列;
-
刚开始的时候还没有到2秒钟,因此任务队列是空的,没有任务;
-
循环检查;
-
2s后发现有任务队列里有一个任务;
-
执行定时器任务;
问题
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
正值招聘旺季,很多小伙伴都询问我有没有前端方面的面试题!
CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
c (备注前端)**
[外链图片转存中…(img-8Ue35PYW-1711986471427)]
最后
正值招聘旺季,很多小伙伴都询问我有没有前端方面的面试题!