【发布时间】:2026-01-21 17:15:02
【问题描述】:
这是我无法理解的问题。看这段JS代码:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>The Beginning...</p>
<script>
alert('Hello, Wolrd!');
</script>
<p>...The End Of Doc</p>
</body>
</html>
所以问题是我不明白为什么The Beginning 段落在<script> 标记之前没有加载/可见。在几乎所有教程中,都解释了浏览器在遇到脚本之前加载所有 HTML,然后当遇到脚本时,浏览器开始以脚本的编译模式工作,然后当脚本结束时,浏览器返回 HTML 模式。
但实际上它的行为似乎有所不同,因为 The Beginning 文本仅出现在 脚本警报之后:
请有人解释一下为什么会这样?
PS:只有 Firefox 的行为如教程中所述。
【问题讨论】:
-
这是因为
alert,如果您输入console.log,它将按预期运行。 -
@AnshumanJaiswal 我不确定这是解决此问题的正确方法,因为 console.log 不会停止脚本的运行,但 alert 会 - 这里使用 alert 的主要原因是停止脚本并查看停止时加载了什么:)
-
有趣的是,正如您所说,您所描述的内容与很多教程相矛盾,并且投票率很高,like this one。我可以在 Chrome 和 Safari 中重现该行为,但不能在 Firefox 上重现。我还找到了this question,和你的很相似。在那个问题中,大多数用户无法重现 OP 的行为,但这是我在 Safari 和 Chrome 上遇到的行为。
-
这似乎和当前的问题有些关系:developers.google.com/web/updates/2017/03/dialogs-policy
-
奇怪的是,
<script defer>没有任何改变。
标签: javascript html