为了账号安全,请及时绑定邮箱和手机立即绑定

Event Loop 中异步任务的疑问◔ ‸◔?

Event Loop 中异步任务的疑问◔ ‸◔?

烙印99 2018-11-07 13:15:47
这两天看了 Event Loop 相关的技术文章,写了一个测试代码,发现测试结果并不稳定,可能会因为一些变量而导致不同的结果。不知道是浏览器实现的问题还是测试代码的问题。参考技术文章为了后面方便引用,给参考文章加上编号JavaScript 运行机制详解:再谈Event Loop - $RYF并发模型与Event Loop - MDN - $MDN首先贴代码:测试环境Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3041.0 Safari/537.36运行了很多次,把比较典型的三种结果贴出来:我的具体问题:第二个<script>标签中的同步代码的执行结果为什么排在异步回调之后?$RYF 文章中第四章讲到:执行栈中的代码(同步任务),总是在读取"任务队列"(异步任务)之前执行。setTimeout()的回调函数为什么会在主进程(另外一个<script>标签中的同步代码)和异步任务(XHR请求 jQuery 文件)之前调用?$RYF 文章中第五章讲到:setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,也就是说,尽可能早得执行。它在"任务队列"的尾部添加一个事件,因此要等到同步任务和"任务队列"现有的事件都处理完,才会得到执行。$MDN 中的 事件循环 -> 添加消息 段落讲到:调用 setTimeout 函数会在一个时间段过去后在队列中添加一个消息。这个时间段作为函数的第二个参数被传入。如果队列中没有其它消息,消息会被马上处理。难道测试结果二和三种,setTimeout()的回调函数出现在XHR的回调函数之前是因为当时消息队列中为空吗?往消息队列中添加消息是在事件触发的时候嘛?例如,通过XHR请求 jQuery 资源,待 jQuery 文件加载完成会触发“加载完成事件”,这时候会在消息队列中添加一个消息,等待主进程读取并调用对应的回调函数。为什么 jQuery 资源加载时间的变化,会引起另外一个<script>标签中的同步代码、XHR的回调以及setTimeout()方法的回调,这三段代码执行先后的变化?如有描述错误地方,请指正。。
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 475 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号