首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个<script>标签在超文本标记语言中的含义

多个<script>标签在超文本标记语言中的含义
EN

Stack Overflow用户
提问于 2011-01-11 23:41:05
回答 5查看 100.7K关注 0票数 36

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

谢谢,菲利普

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-11 23:42:26

简单答案:

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

带不同警告的详细讨论

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

但是,各个<script>标记是按顺序执行的。

参考文档请参考JavaScript: The Definitive Guide。引用"12.3. JavaScript程序的执行“章节:

出现在和标记之间的

JavaScript语句按出现的顺序执行;当一个文件中出现多个脚本时,脚本将按出现的顺序执行。如果脚本调用document.write( ),则传递给该方法的任何文本都会紧跟在结束标记之后插入到文档中,并在脚本运行结束时由HTML解析器进行解析。相同的规则也适用于包含在具有src属性的单独文件中的脚本。

请注意,上述情况只适用于“直接”执行标记中的代码。但是,顺序可能会受到以下因素的影响:

  • setTimeout()调用(duh)
  • defer attribute
  • Dynamic attachement of <script>标签-请参阅此答案的最后一节。

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

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

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

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

票数 42
EN

Stack Overflow用户

发布于 2011-01-11 23:54:25

实例化jQuery对象的调用越少,开销就越小--但即使是为运行在第二代硬件上的旧浏览器设计的,也要小心微优化。分析您的应用程序并修复实际成为瓶颈的部分。

至于浏览器处理多个脚本标记的方式--它因浏览器而异,因版本而异,有时甚至因操作系统而异。所有浏览器都按文档顺序执行每个脚本标记:

代码语言:javascript
运行
复制
<script src="scripts/some_script.js"></script> <!-- Executed 1st -->
<script src="scripts/some_other_script.js"></script> <!-- Executed 2nd -->
<script>
// Some JavaScript
</script> <!-- Executed 3rd -->
<script>
// Some More JavaScript
</script> <!-- Executed 4th -->

但是,其他行为没有定义,并且存在差异。例如,Opera (至少在Windows XP For version 10.6上)在其自己的上下文中运行每个脚本标记--因此,如果在第四个脚本块中引用,则第三个脚本块中的局部变量将超出范围。

代码语言:javascript
运行
复制
<script>
var i = 42;
</script>
<script>
alert(i);
// Alerts "undefined" in Opera, but 42 in Firefox.
</script>
票数 4
EN

Stack Overflow用户

发布于 2011-01-11 23:45:04

浏览器按顺序执行JavaScript ( jQuery也是如此,因为jQuery就是JavaScript)。

至于在HTML中有多个脚本标记,这没有理由成为问题。正如Nabab所问的,我很有兴趣看看你的消息来源。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4659409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档