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

时间:2013-05-18 12:50:39

标签: javascript jquery html document-ready

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

例如,以下是否安全?

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

...
$(document).ready(function() {
    alert('My Var = ' + myVar);
}

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

3 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:1)

可以安全地假设myVAr可以从$(document).ready(function() {})中访问。

如果您在HTML中运行代码,myVar将成为window JS全局对象(即window.myVar)的属性。我不认为有必要在jQuery函数中本地创建它。