脚本延迟似乎没有按预期工作

时间:2018-05-31 21:42:23

标签: javascript

我有以下测试来查看defer属性是否延迟脚本块的执行。有2个脚本块。第一个具有defer属性,第二个具有out。如果我理解正确,该属性会强制浏览器在所有html解析完成后执行块(包括其他script块)。

但是看着控制台,我总是先从'延迟'开始。这是为什么? defer无法在本地script块上运行吗?

<html>
<body>
   ...

  <script type="text/javascript" defer>
    console.log('from deferred');
  </script>

  <script type="text/javascript">
    console.log('from regular');
  </script>

</body>
</html>

1 个答案:

答案 0 :(得分:4)

defer 仅适用于外部脚本:

  

如果src属性不存在(即内联脚本),则不得使用此属性,在这种情况下,它将不起作用。

     

要为动态插入的脚本实现类似的效果,请改用async=false。带有defer属性的脚本将按它们在文档中出现的顺序执行。

此外,

  

在浏览器继续解析页面之前,会立即获取并执行没有asyncdefer属性的脚本以及内联脚本。

由于本地脚本在页面完成解析之前执行,因此defer将不适用。 {/ 1}}在解析后应用,但在 DomContentLoaded 之前