脚本标签VS Html代码优先世界你好

问题描述 投票:0回答:3

在下面的代码中:

<!DOCTYPE html>
<html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
    
    <span>1111</span>
    
    <script>
      alert("1");
    </script>
    
    <span>22222</span>
    
    <script>
      alert("2");
    </script>
    
      <span>Hello World</span>
     <script>
       alert("Hello World");
     </script>
      
  </body>
</html>

在body标签中,有一些span标签,每个span标签后面都有一个script标签。在每个脚本标签中只有一个警报。

当我通过浏览器打开这些代码时,我希望跨度标签在警报之前执行(呈现)。因为跨度在警报之前(警报在跨度之后!)

但是在真正的测试中,它并不像我预期的那样(首先显示警报,然后会出现跨度。) 为什么?!

javascript html browser frontend
3个回答
0
投票

加载页面时,浏览器将渲染并“绘制”页面,直到遇到阻塞资源。同步 JavaScript 是阻塞渲染的。在这种情况下,警报会被同步调用并阻止页面呈现。

运行您的代码时,我的浏览器被前两个警报阻止,但已解析足够的 HTML 来呈现“1111”和“22222”元素,然后再次被第三个警报“hello world”阻止。

这里有一些相关阅读:


0
投票

A

<span>
元素是 HTML。
alert()
window
对象的方法,而不是真正的 JavaScript。换句话说,
alert()
是对
window
对象的 API 调用。
window
对象由浏览器的核心编程(用本机代码编写)而不是 JavaScript 运行时处理。浏览器的核心编程处理速度比 JS 代码快得多,因此,有时当您调用
window
API 时,提供结果的速度比 HTML 解析器或 JS 运行时更快。对于
alert()
,它是一个模式对话框并阻止 UI 更新,因此处理速度比
span
元素的渲染速度更快。


-1
投票

加载页面时,浏览器在接收和处理代码时开始显示和处理该页面。在这种情况下,当浏览器遇到该标签时,它会执行其内容,然后继续显示页面。

要更改此行为,您可以使用特殊属性,例如 defer

© www.soinside.com 2019 - 2024. All rights reserved.