Javascript DOM执行顺序

Javascript DOM执行顺序,javascript,html,dom,Javascript,Html,Dom,据我所知,html/javascript的执行顺序是串行的(与所有编程语言一样),这意味着浏览器逐行读取html/javascript代码并对其进行解释 这就是为什么一些javascript程序员将标记放在主体的末尾,以确保整个DOM都已加载,并且现在可以访问他们想要的任何元素。 他们就是这样做的- <html> ... <body> ... <script> //whatever code you want to put </script> &l

据我所知,html/javascript的执行顺序是串行的(与所有编程语言一样),这意味着浏览器逐行读取html/javascript代码并对其进行解释

这就是为什么一些javascript程序员将标记放在主体的末尾,以确保整个DOM都已加载,并且现在可以访问他们想要的任何元素。 他们就是这样做的-

<html>
...
<body>
...
<script> //whatever code you want to put
</script>
</body>

...
...
//不管你想写什么代码
我想测试一下,所以我写了以下代码

<html>
<head>
</head>
<body>
<script>
var elm=document.getElementById("myp");
alert(elm.innerHTML);
</script>
<p id="myp"> well this is darned interesting </p>
</body>
</html>

var elm=document.getElementById(“myp”);
警报(elm.innerHTML);
这真是太有趣了

如您所见,我将脚本放在定义p元素之前,脚本正在尝试访问它。我想我会得到一个错误,因为p还没有被定义,但我得到了“这真是太有趣了”(p的值)。 当我将脚本放入head元素时,也会发生同样的情况。(使用chrome和firefox进行测试)


有人能解释一下发生了什么事吗

抛开这个特定示例的细节不谈,我将总结一下一般原则。我的源代码是Flanagan,JavaScript:The Ultimate Guide,5/e

将浏览器视为读取一行HTML并呈现某些响应是过于简单的。当然,它会按顺序扫描输入,但DOM对象构造的顺序并不是逐行扫描输入。最好把它当作一个黑盒子

如果您想运行一个将操作DOM元素的脚本,安全可靠的方法是将其作为
onload
事件的处理程序运行。有时,您可以编写内联脚本来执行此操作,但这是一个灰色区域。弗拉纳根写道:

大多数浏览器似乎允许脚本操作任何文档 出现在
标记之前的元素。一些JavaScript 程序员经常这样做。然而,没有任何标准要求它 工作,而且在一些人中有一种持续的,尽管模糊的信念 有经验的JavaScript编码人员,负责放置文档操作代码 在
中,标记可能会导致问题。。。。(第256页)


但是,您可能需要在解析完所有HTML之后但在加载所有图像之前操作DOM。如果这是您的需要,那么像jQuery及其事件这样的工具就是最好的选择。

我在firebug控制台/Fx13上遇到了一个错误,正如我所预料的:好的,但结果仍然是“这真是太有趣了”。我只是想知道现代浏览器在这个问题上发生了什么…结果如何?警报根本不会显示,并且文本已经是标记的一部分。我在Firefox13.0上看到了警报,我在chrome上也看到了。我没有。这是一把类似的小提琴。我只收到第二次警报。