gpt4 book ai didi

javascript - HTML 中多个 <script> 标签的含义

转载 作者:IT王子 更新时间:2023-10-29 03:19:11 27 4
gpt4 key购买 nike

我读到不建议在 HTML 中多次实例化 jQuery。这对我来说很有意义,但是:Javascript 不是单线程的吗?抛开 jQuery,浏览器如何执行这些多个脚本标签?并行还是一个接一个?

谢谢,菲利普

最佳答案

简单的回答:

在一个简单的场景中(标签是原始 HTML 文本的一部分),浏览器肯定会一个接一个地执行它们。

带有不同注意事项的详细讨论

JavaScript 不一定是单线程的(它取决于您的 JavaScript 引擎的实现,例如参见 Web Workers)。

但是,个人 <script>标签按顺序执行。

有关引用,请参阅 JavaScript: The Definitive Guide .引用章节“12.3. JavaScript 程序的执行”:

JavaScript statements that appear between and tags are executed in order of appearance; when more than one script appears in a file, the scripts are executed in the order in which they appear. If a script calls document.write( ), any text passed to that method is inserted into the document immediately after the closing tag and is parsed by the HTML parser when the script finishes running. The same rules apply to scripts included from separate files with the src attribute.


请注意,以上仅适用于在标签中“直接”执行代码。但是,订单可能会受到以下因素的影响:

  • setTimeout()打电话(duh)

  • defer attribute

  • <script> 的动态附件标签 - 请参阅此答案的最后一部分。


作为警告,请注意 JavaScript 代码是通过 <script src="xxxx" /> 从外部加载的仍然会按顺序执行,但是,浏览器很可能会并行下载代码 - 取决于浏览器的实现(但仍会按正确的顺序安排下载的代码片段的执行)。

这个警告很重要,以防你想要一些奇怪的黑客攻击,而 JavaScript 源的 URL 实际上是一个 CGI 脚本,它做了一些事情,你试图依赖脚本中逻辑的正确下载顺序。

同样,它不会影响您的浏览器 JS 引擎对这些脚本片段的执行顺序。


但是,更重要的警告是,如果您实际附加了 <script>根据 this SO post 动态地使用外部源标记(例如通过 appendChild() 调用) ,以及 MSDN blog the post was based on ,非IE浏览器不保证执行顺序!这将取决于哪个标签的代码先完成下载!

关于javascript - HTML 中多个 &lt;script&gt; 标签的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659409/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com