【问题标题】:when does Javascript Engine work?Javascript 引擎何时工作?
【发布时间】:2017-09-15 05:11:59
【问题描述】:

我正在研究浏览器,我有一个问题。

我发现的HTML的过程是,

  1. 浏览器中的网络引擎从 Web 服务器获取 HTML 文件。
  2. HTML 解析器开始解析 HTML 文件并生成 DOM。
  3. Web Layout Engine 开始使用 DOM 进行渲染

当Html解析器遇到时,立即调用Javascript引擎进行代码解释?要么 解析器收集它们,然后在制作 DOM 后发送部分?

如果他们立即调用Javascript引擎,如果在完成制作DOM之前有关于编辑DOM对象的代码。

如果我错了,请告诉我正确的

【问题讨论】:

  • <script> 标签在遇到时立即运行(解析器从上到下读取文件)。 <script> 下面的任何 HTML 对最初运行的任何代码都是“不可见的”。这就是为什么经常需要使用 onload 事件来等待 DOM 在大多数 JavaScript 运行之前完成加载的原因。
  • 非常感谢。我明白了!

标签: javascript web browser v8


【解决方案1】:

您的假设是正确的,即它立即开始解释代码以及您对可能错误的猜测。

以下示例

<div id="test"></div>
<script>
  console.log(document.getElementById('test'));
</script>

您会看到 div 元素记录在控制台中。但是在下面,由于 javascript 在 div 之前,您会看到 null 被记录下来。

<script>
  console.log(document.getElementById('test'));
</script>
<div id="test"></div>

这就是为什么在现代 Web 开发中人们将他们的脚本标签放在正文的底部。

<html>
  <head></head>
  <body>
    <!-- HTML CONTENT -->
    <div id="test"></div>
    <!-- script CONTENT -->
    <script>
      console.log(document.getElementById('test'));
    </script>
  </body>
</html>

【讨论】:

  • 挑剔但getElementById返回Element || null,而不是Element || undefined
  • 那么外部库怎么样?我看到很多情况下,头部的脚本标记用于加载外部库,例如 angular js、Jquery 等。那些库中没有关于编辑 DOM 的代码吗?希望我没有打扰到你。
  • 你不是 (: 他们要么不编辑 DOM,要么通过document.body.append 创建自己的 DOM,或者公开一个变量以供页面稍后使用。例如 lodash 在顶部导入的文件将_ 对象添加到全局范围。随意问任何你想要的。@Kaiido 当你的权利是你的权利时
猜你喜欢
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 2011-04-22
  • 2011-04-07
相关资源
最近更新 更多