内联/阻止Javascript在文档就绪之前执行了吗?

Jér*_*nge 9 html javascript jquery document-ready

假设一个HTML文档中的内联Javascript代码(例如正文),这个Javascript代码总是在JQuery文档就绪代码之前执行吗?

例如,以下安全吗?

...
<body>
    <script type="text/javascript">
        var myVar = 2;
   </script>
   ...
</body>

...
$(document).ready(function() {
    alert('My Var = ' + myVar);
}
Run Code Online (Sandbox Code Playgroud)

如果没有,我怎样才能确保安全知道myVar在内联/块代码中定义?

nnn*_*nnn 12

是的,上面的代码是安全的.在从上到下解析文档时遇到内联JS.文档就绪处理程序在文档准备就绪时执行(显然),并且在整个文档被解析(包括内联脚本)之前它不会就绪.

请注意,如果将包装的代码作为文档正文中的最后一个包含,那么您实际上并不需要文档就绪处理程序,因为此时不仅会执行其他内联JS,而且所有文档元素都将被执行添加到DOM,因此可以从JS访问.


bfa*_*tto 7

是的,在解析HTML时执行内联JavaScript.

这样做是安全的,只要您不尝试获取对尚未解析的DOM元素的引用(即HTML源代码中脚本块之后的任何元素).您还可以引用在早期脚本块上定义的任何变量(只要它们在范围内).

而且,正如Matt Browne在他的评论中指出的那样,如果你把依赖于DOM的脚本放在结束</body>标记之前,那么通常也不会使用DOMContentLoaded监听器(或oldIE解决方法或window.onload).此时,所有HTML元素都已经在DOM中(除非您之后有其他元素</body>,这将是无效的HTML).

  • 一个相关的注释:如果你在关闭`</ body>`标签之前放置依赖于jQuery的脚本,通常也不会使用`$(document).ready()`. (3认同)
  • 关于注释的注释:依赖于jQuery的脚本可以在包含jquery.js之后的任何位置.但是我们知道@MattBrowne意味着什么:依赖于准备好的DOM的脚本可以放在正文的末尾而不是现成的处理程序中. (3认同)