我读到过,不推荐在HTML中多次实例化jQuery。这对我来说很有意义,但是: Javascript不是单线程的吗?抛开jQuery不谈,浏览器如何执行这多个脚本标记?并行的还是一个接一个的?
谢谢,菲利普
发布于 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)<script>标签-请参阅此答案的最后一节。作为警告,请注意,通过<script src="xxxx" />从外部加载的JavaScript代码仍将按顺序执行,但是,浏览器很可能会以并行方式下载代码-这取决于浏览器的实现(但仍会按正确的顺序安排下载代码片段的执行)。
这个警告很重要,以防你想进行一些奇怪的攻击,而JavaScript源代码的URL实际上是一个CGI脚本,它做了一些事情,并且你试图依赖于脚本中逻辑的正确下载顺序。
同样,它也不会影响浏览器JS引擎对这些脚本片段的执行顺序。
然而,一个更重要的警告是,如果你真的用外部源动态附加<script>标签(例如,通过appendChild()调用),根据this SO post,以及MSDN blog the post was based on,非IE浏览器不保证执行的顺序!这将取决于哪个标签的代码首先完成下载!
发布于 2011-01-11 23:54:25
实例化jQuery对象的调用越少,开销就越小--但即使是为运行在第二代硬件上的旧浏览器设计的,也要小心微优化。分析您的应用程序并修复实际成为瓶颈的部分。
至于浏览器处理多个脚本标记的方式--它因浏览器而异,因版本而异,有时甚至因操作系统而异。所有浏览器都按文档顺序执行每个脚本标记:
<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上)在其自己的上下文中运行每个脚本标记--因此,如果在第四个脚本块中引用,则第三个脚本块中的局部变量将超出范围。
<script>
var i = 42;
</script>
<script>
alert(i);
// Alerts "undefined" in Opera, but 42 in Firefox.
</script>发布于 2011-01-11 23:45:04
浏览器按顺序执行JavaScript ( jQuery也是如此,因为jQuery就是JavaScript)。
至于在HTML中有多个脚本标记,这没有理由成为问题。正如Nabab所问的,我很有兴趣看看你的消息来源。
https://stackoverflow.com/questions/4659409
复制相似问题