You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTML页面中同步与异步脚本的执行顺序疑问

关于async脚本执行顺序的问题解答

为什么日志顺序始终是A→B→dynamic async script?

  • 浏览器的JavaScript引擎是单线程执行模型,同步脚本会阻塞整个JS执行栈,只有当前同步任务全部执行完毕,才会处理异步任务队列。
  • 脚本A是同步内联脚本,执行时先打印'A',然后发起test.js的下载请求。但此时浏览器的JS线程并没有空闲,紧随其后的脚本B是另一个同步内联脚本,会被直接加入同步执行队列,优先于任何异步任务执行。
  • 即便test.js在脚本B执行过程中就下载完成了,它的执行也必须等脚本B的所有同步代码跑完,JS执行栈清空后才能触发——这就是为什么你永远看不到它插在A和B之间执行。

为什么加了wait循环后脚本B还是先执行?

你的理解完全正确:那个while循环是同步阻塞代码,会完全占用JS线程,直到循环结束。哪怕test.js早就下载好了,浏览器也没法中断当前的同步执行流程去运行异步脚本,必须等脚本B的所有代码执行完毕,线程空闲后才会处理异步任务。

能不能保持脚本B同步的前提下,让动态脚本先打印?

不行。只要脚本B是同步脚本,它就会被纳入当前的同步执行队列,必须在所有异步任务之前执行。异步脚本(包括动态添加的async脚本)的执行时机永远是当前同步执行栈清空之后,没有任何办法让异步脚本插队到同步脚本的执行流程中。


内容的提问来源于stack exchange,提问作者Yael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 18:54:50