很好的问题。
整个“将脚本放在页面底部”建议及其试图解决的问题存在一些混淆。对于这个问题,我不会谈论将脚本放在页面底部是否会影响性能/加载时间。我只说$(document).ready
如果你也把脚本放在页面底部,你是否需要。
我假设您在脚本中立即调用的那些函数中引用了 DOM(任何像document
或一样简单的东西document.getElementById
)。我还假设您只询问这些 [DOM 引用] 文件。IOW、库脚本或 DOM 引用代码所需的脚本(如 jQuery)需要放在页面的较早位置。
回答您的问题:如果您在页面底部包含 DOM 引用脚本,则不,您不需要$(document).ready
.
说明:没有"onload"
相关实现的帮助,如$(document).ready
经验法则是:与页面内的 DOM 元素交互的任何代码都应该放置/包含在页面下方而不是它引用的元素。最简单的方法是将该代码放在结束之前</body>
。请参阅此处和此处。它还可以解决 IE 可怕的“操作中止”错误。
话虽如此,这绝不会使$(document).ready
. 在加载之前引用对象是在 DOM JavaScript 中开始时最常见的错误[之一](见证它的次数太多了,数不过来)。它是 jQuery 对问题的解决方案,它不需要您考虑相对于它引用的 DOM 元素,该脚本将包含在何处。这对开发人员来说是一个巨大的胜利。这只是他们需要考虑的少一件事。
此外,将所有引用 DOM 的脚本移动到页面底部通常很困难或不切实际(例如,任何发出document.write
调用的脚本都必须保持原状)。其他时候,您正在使用一个框架来呈现一些模板或创建动态 javascript 片段,其中引用需要在 js之前包含的函数。
最后,它曾经是“最佳实践”,以堵塞所有DOM引用代码到window.onload
,但它已被掩盖$(document).ready
了实现良好的文档的原因。
所有这些加起来$(document).ready
是解决过早引用 DOM 元素问题的一个非常优越、实用和通用的解决方案。