$(document).ready()和在body结束时包含脚本有什么区别?

4
在jQuery的$(document).ready()中执行JavaScript函数和在HTML中包含它在body标签末尾的script标签中有什么区别?
谢谢,
DLiKS
3个回答

7
<script>标签中的JavaScript代码会立即执行。请注意,在这种情况下,页面尚未完全解析,DOM也还没有准备好。
在jQuery的ready()回调函数中的JavaScript代码会在DOMContentLoaded事件上被执行,该事件发生在浏览器解析整个HTML源代码之后。
关于此事件:https://developer.mozilla.org/en/Gecko-Specific_DOM_Events 请注意,定义ready处理程序的现代方式是:
$(function() {
    // code
});

另外,请参阅这个SO问题,它指出当您不使用准备回调时会发生什么: 在浏览器中执行单个网页需要多少个JavaScript程序?


1
但是将脚本包含在body结尾处是否等同于在DOM准备就绪事件上执行它? - DLiKS
不,将所有内容放在底部只是使浏览器在代码加载时不会阻塞,特别是来自外部脚本(例如:<script src='code.jquery.com/script...'>)。 - helloandre
@Byron 经常发生这种事情... :) - Šime Vidas

3
  • 在body末尾的脚本会在加载时立即运行。
  • $.ready会在文档完成后执行(任何链接的css也会被加载)。
  • Body.load只有在所有图片都加载完成后才会运行。

1

这个 Stack Overflow 问题可能会有帮助。

如果你在放置在闭合的 body 标签(</body>)旁边的脚本中调用一个函数,那么这与在 <head> 部分使用 $(document).ready(function(){}); 是一样的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接