问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求解 关于js轮询问题

发布网友 发布时间:2022-05-15 06:47

我来回答

2个回答

懂视网 时间:2022-05-15 11:08

JS是单线程语言,深入理解JS里的Event Loop,本文主要和大家分享JS事件轮询机制,希望能帮助到大家。

JS的执行机制(一):

1.首先判断JS是同步还是异步,同步就进入主进程,异步就进入event table

2.异步任务在event table中注册函数,当满足触发条件后,被推入event queue

3.同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看是否有可执行的异步任务,如果有就推入主进程中

JS的执行机制(二)

1.执行一个宏任务,过程中如果遇到微任务,就将其放到微任务的【事件队列】里

2.当前宏任务执行完成后,会查看微任务的【事件队列】,并将里面全部的微任务依次执行完

任务划分方式:

1.macro-task(宏任务):script,setTimeout,setInterval

2.micro-task(微任务):Promise,process.nextTick

我们从一道小题目出发

for (var i=0;i<=5;i++){
 setTimeout(()=>{console.log(i)},1000)
}

输出结果应该是1s之后连续打印6个6,虽然这个题目的主要知识点是块级作用域,但非常适合用来引出事件轮询机制。因为setTimeout是异步任务,所以不会立即执行,它需要等到所有的同步任务执行完毕,即for循环结束,当i变为6时开始同时执行6个定时器,此时i指向值为6的全局变量,所以打印6,这就是JS执行机制(一)

加点难度,考虑JS执行机制(二)

// promise里面的函数是立即执行的// 分别
输出 2 3 5 4 1setTimeout(function () { console.log(1) },0);new Promise(function executor(resolve) { console.log(2); for(var i=0;i<10000;i++){ i==9999 && resolve(); } console.log(3); }).then(function () { console.log(4); }); console.log(5);

首先执行的第一个宏任务肯定是脚本(script),所以定时器会被跳过(不论你延迟几秒执行),紧接着执行Promise里面的内容,按顺序执行,先打印2,然后进行for循环,resolve()是异步回调函数,属于异步执行的内容,同时如我们在任务划分里面提到的,Promise属于微任务,所以会在宏任务结束之后清空微任务事件队列,所以接下来会打印3,5,4。
至此第一个宏任务便处理完毕,然后才会轮到定时器。

热心网友 时间:2022-05-15 08:16

/*
循环函数:
参数:
circleArray:循环数组
padding:舍弃时计数单位(如:3表示逢3舍弃)
index:循环开始索引(默认为0)
*/
function circle(circleArray, padding,index) {
var arrayReturn = [];
var indexPlus = index;
for (var i = 0; i < circleArray.length; i++) {
if ((i > 0) && ((i + indexPlus) % padding > 0)) {
arrayReturn.push(circleArray[i]);
}
index = (i + indexPlus) % padding;
}
if (arrayReturn.length > 1) {
return circle(arrayReturn, padding, index)
}
else if (arrayReturn.length == 1) {
return arrayReturn[0];
}
else {
return circleArray[0];
}
}
/*
获取数组函数:
参数:
max:数组中最大的数值(从1到max)
*/
function getArray(max) {
var array = [];
for (var i = 1; i <= max; i++) {
array.push(i);
}
return array;
}
var last= circle(getArray(100), 3, 0);//last就是最后的那个数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 领淘通淘客助手这个软件怎么样? 三八线里演朴弘哲老婆的是谁演的 网络的组成? 全国师范类大学排名一览表 iptables网关3389端口转发 西安哈士奇多少钱? 【合集】美剧历史排行榜前50,【免费高清】在线观看百度网盘资源 德国WBT-999 发烧音频 怎么样? 电子显微镜中国aperture diaphram和field diaphram是什么意思 哈士奇现在多少钱?? 大家帮忙配个独立显卡! 华为手机怎么连上联想拯救者 长期早饭午饭不吃,晚饭多吃,有哪些危害? 不吃早饭和不吃午饭哪个危害大 长期只吃早点和下午饭,不吃中午饭这样有害身体吗? 每天只吃早餐 不吃午饭 还吃晚饭有害吗 为什么吃过早餐就不太想吃午饭了呢 为什么五四青年节,总能让人心中热血沸腾? 吃早餐不吃午餐和晚餐可以吗? 偶尔一天光吃早饭不是午饭晚饭,可以吗? 每天只吃早饭和晚饭,午饭不吃,有影响吗? ga-z87p-d3无盘启动系统在哪里 偷心俏佳人电影 弹电吉他solo时是把指型套进去练习,还是怎样顺手怎样练习呢??? 八大战略指的是什么? 对碰瓷社会现象看法 宁夏理科排名3398能上什么大学? 南方达达乐队电吉他间奏教学视频 你知道国旗的来历吗? 宁夏最好的民办本科高校有哪些 为什么六福珠宝金手镯戴久了之后颜色会变黑 本人刚学习电吉他,最近想练加州旅馆的尾奏solo,我看他们做的视频怎么都有伴奏呀?我找了好久也找不到 - 信息提示 学习电吉他solo 要生活好就要制造好? 南派三叔是盗墓的吗 7人闺蜜网名和头像,个性签名1男六女 《盗墓笔记》作者南派三叔以前是不是盗墓的啊? 北京冬奥会奖牌榜出炉,通过奖牌榜你看出了什么? 电吉他独奏solo四分钟是什么水平 采购为什么上传合同