当前位置:首页 > JavaScript

js 实现 defer

2026-01-31 20:11:53JavaScript

在 JavaScript 中,defer 是一种脚本加载属性,用于延迟脚本的执行,直到 HTML 文档解析完成。以下是几种实现 defer 效果的方法:

使用 defer 属性

在 HTML 中直接为 <script> 标签添加 defer 属性,浏览器会异步加载脚本但延迟执行,直到 DOM 解析完成。

<script src="script.js" defer></script>

动态加载脚本

通过 JavaScript 动态创建 <script> 标签并设置 defer 属性,实现延迟加载。

const script = document.createElement('script');
script.src = 'script.js';
script.defer = true;
document.head.appendChild(script);

监听 DOMContentLoaded 事件

将脚本逻辑包装在 DOMContentLoaded 事件监听器中,确保脚本在 DOM 解析完成后执行。

document.addEventListener('DOMContentLoaded', function() {
    // 脚本逻辑
});

使用 asyncPromise

结合 asyncPromise 实现类似 defer 的效果,确保脚本在 DOM 准备好后执行。

async function loadDeferredScript() {
    await new Promise(resolve => {
        if (document.readyState === 'complete') {
            resolve();
        } else {
            document.addEventListener('DOMContentLoaded', resolve);
        }
    });
    // 脚本逻辑
}
loadDeferredScript();

模块化加载

使用 ES6 模块的 import 语法,模块默认具有 defer 行为。

js 实现 defer

<script type="module" src="module.js"></script>

注意事项

  • defer 仅适用于外部脚本(带有 src 属性的 <script> 标签)。
  • 多个 defer 脚本会按顺序执行,而 async 脚本执行顺序不确定。
  • 动态创建的脚本默认是异步的,需显式设置 defer 或通过事件控制执行时机。

标签: jsdefer
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…