以下图片取自 whatwg 的规范,可以说是最权威的图文解释了,详细参考原文[2]❞async 与 defer 区别
在正常情况下,即 <script>
没有任何额外属性标记的情况下,有几点共识
fetch
(加载) 和 execution
(解析并执行)而 defer
与 async
的区别如下:
DomContentLoaded
之前当以下 index.js
加载时,属性是 async
与 defer
时,输出有何不同?
「index.html」
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script src="./defer.js" defer></script>
<script src="./async.js" async></script>
<script>
console.log('Start')
document.addEventListener('DOMContentLoaded', () => {
console.log('DCL')
})
</script>
</body>
</html>
「derfer.js」
console.log('Defer Script')
「async.js」
console.log('Async Script')
答:defer 总是在 DCL 之前输出,但是 async 有可能之前也有可能之后