javascript - HTML 中的脚本解析顺序

标签 javascript html google-chrome browser

浏览器加载脚本

<!DOCTYPE html>
<html dir="ltr">
<head>
<script type="text/javascript" src='./value-of-a-is-1.js'></script> <!-- Loads slow as per network tab in chrome -->
<script type="text/javascript" src='./value-of-a-is-2.js'></script> <!-- Loads faster as per network in chrome -->
</head>
<body></body>
</html>

注意:第一个脚本的加载速度比第二个脚本慢。正如我在 Chrome 的网络选项卡上检查过的那样。

现在如果转到控制台并说 console.log(a);变量 a 的值应该是多少(1 或 2)?

最佳答案

使用您拥有的 script 标签,脚本可以并行加载,但它们将按顺序运行(一个接一个) ,按照它们在 HTML 中出现的顺序。

因此,如果确实如此,则 a 将是 undefined (两个脚本均未运行)或 2 (两个脚本均已运行)第一个脚本将加载缓慢,因为当它完成加载时,两个脚本将立即依次运行。

为了避免想知道在控制台中输入的时间,您可以这样做:

<script>
var a = "initial";
console.log(a);
</script>
<script type="text/javascript" src='./sets-a-to-one.js'></script>
<script>
console.log(a);
</script>
<script type="text/javascript" src='./sets-a-to-two.js'></script>
<script>
console.log(a);
</script>

...其中 sets-a-to-one.jsa = 'one';sets-a-to-two。 Node.jsa = 'two';

您将可靠地看到:

initial
one
two

...无论脚本的相对加载速度如何。

请注意,asyncdefer 属性可以更改此行为;请参阅the spec了解详情。 (某些浏览器可能不支持它们,或者可能只支持其中一种,或者在支持中可能存在错误,FWIW。)

关于javascript - HTML 中的脚本解析顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34185927/

相关文章:

javascript - 执行此操作的更有效的编程方法是什么

javascript - jquery 推送容器 div 与类

javascript - 网络应用程序可以转换为谷歌浏览器应用程序吗?

javascript - CesiumJS矩形实体重叠和大小问题

css - 如何将 html5 视频拉伸(stretch)到全高?

http - Chrome 不加载页面,safari 可以

javascript - .catch() 中返回的 promise 不能再次被 .catch'ed 吗?

javascript - 动态创建的 HTML5 音频在某些浏览器中无法播放?

javascript - 正则表达式 : Any character that is not a letter or number

javascript - 如何在页面中将其添加为html