假设有一个HTML文档中的内联Javascript代码(例如正文),这个Javascript代码是否总是在JQuery文档就绪代码之前执行?
例如,以下是否安全?
...
<body>
<script type="text/javascript">
var myVar = 2;
</script>
...
</body>
...
$(document).ready(function() {
alert('My Var = ' + myVar);
}
如果没有,我怎样才能确保在内联/区块代码中定义myVar
安全?
答案 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函数中本地创建它。