9

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

例如,以下安全吗?

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

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

如果不是,我怎样才能确保知道myVar是在内联/块代码中定义的?

4

3 回答 3

12

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

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

于 2013-05-18T12:54:18.493 回答
7

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

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

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

于 2013-05-18T12:54:50.370 回答
1

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

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

于 2013-05-18T13:25:17.023 回答