我有以下测试来查看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>
答案 0 :(得分:4)
defer
仅适用于外部脚本:
如果
src
属性不存在(即内联脚本),则不得使用此属性,在这种情况下,它将不起作用。要为动态插入的脚本实现类似的效果,请改用
async=false
。带有defer属性的脚本将按它们在文档中出现的顺序执行。
此外,
在浏览器继续解析页面之前,会立即获取并执行没有
async
或defer
属性的脚本以及内联脚本。
由于本地脚本在页面完成解析之前执行,因此defer
将不适用。 {/ 1}}在解析后应用,但在 DomContentLoaded 之前。