在页面加载前运行模块脚本取决于脚本的类型和设置。通常,JavaScript 脚本可以在 HTML 文档的不同阶段执行,主要包括以下几种方式:
<script>
)内联脚本默认情况下会在 HTML 解析到该脚本时立即执行。这意味着脚本会在页面加载过程中执行,可能会阻塞页面的渲染。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
console.log('Inline script executed');
</script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
<script src="...">
)外部脚本默认情况下也会在 HTML 解析到该脚本时立即执行,类似于内联脚本。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="script.js"></script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
<script defer>
)使用 defer
属性的脚本会在 HTML 文档完全解析完成后,但在 DOMContentLoaded
事件触发之前执行。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="script.js" defer></script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
<script async>
)使用 async
属性的脚本会在下载完成后立即执行,不会阻塞 HTML 解析,但也不会保证执行顺序。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="script.js" async></script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
<script type="module">
)模块脚本默认情况下会在 HTML 解析到该脚本时立即执行,类似于普通脚本,但它们支持 ES6 模块语法。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="module" src="module.js"></script>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
defer
或 async
属性来延迟或异步执行脚本。</body>
标签之前,确保 HTML 解析完成后再执行脚本。defer
属性来保证脚本在 HTML 解析完成后按顺序执行。import
和 export
语法来控制模块加载顺序。通过合理使用这些方法,可以有效地控制脚本的执行时机,提升页面加载性能和用户体验。
领取专属 10元无门槛券
手把手带您无忧上云