JavaScript动态加载脚本主要有三种方式:一是用document.createElement('script')插入DOM,兼容性好,支持错误处理;二是ES模块的import(),支持按需加载和tree-shaking;三是fetch+Function执行字符串代码,仅限可信源。
JavaScript 动态加载与执行脚本,核心是通过创建 <script> 元素并插入 DOM,或使用现代 API(如 import())按需获取和运行代码。关键在于控制加载时机、处理依赖、捕获错误,并避免重复执行或阻塞渲染。
document.createElement('script') 动态插入这是最通用、兼容性最好的方式,适用于任何 JS 文件(本地或 CDN),支持回调与错误处理。
src 属性指向目标文件路径async = true(默认行为)让脚本异步加载不阻塞 HTML 解析;设 defer = true 可保证执行顺序(仅对同域脚本有效,且需在 <head> 中插入)load 事件表示加载成功并已执行;监听 error 事件捕获 404、跨域等失败情况document.head 或 document.body 即可触发加载示例:
function loadScript(src) { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = src; script.async = true; script.onload = () => resolve(script); script.onerror = () => reject(new Error(`Failed to load ${src}`)); document.head.appendChild(script); });}// 使用loadScript('/js/utils.js') .then(() => console.log('utils.js loaded')) .catch(err => console.error(err));
import() 动态导入模块(ES Module)适用于现代浏览器和打包工具(如 Webpack、Vite),支持真正的按需加载、tree-shaking 和静态分析,返回 Promise,天然支持 await。
立即学习“Java免费学习笔记(深入)”;
type="module" 脚本或后缀为 .mjs 的文件)示例:
// utils.js 导出:export function formatDate(date) { ... }// 动态加载并使用async function init() { const { formatDate } = await import('./utils.js'); console.log(formatDate(new Date()));}
当需要加载纯代码字符串(比如从 API 获取 JS 片段),或绕过 CORS 限制(但有安全风险),可用 eval 或 Function 构造器。⚠️ 不推荐用于不可信来源。
fetch 获取脚本文本,再用 new Function(code)() 执行(比 eval 更安全,作用域隔离)import/export,不能直接执行,需先转为模块或改用 import()
示例(仅限可信上下文):
async function executeScript(url) { const res = await fetch(url); const code = await res.text(); new Function(code)();}
动态加载不是“万能补丁”,需结合场景谨慎使用。
document.querySelector(`script[src="${src}"]`) 是否已存在document 未定义,需加判断:if (typeof document !== 'undefined') { ... }
阿里云服务器ECS省钱技巧:临界天数计算公式:付费模式这么选更划算!
阿里云服务器ECS三种付费类型怎么选 包年包月 / 按量 / 抢占式成本对比
2026阿里开发者社区认证的门店小程序开发工具实测对比:附门店小程序制作教程
2026阿里开发者评选出的全国最佳教培机构小程序开发工具实测对比:附教培机构小程序制作教程
轻抖app如何实名认证 轻抖实名认证方法
2026全国3款AI/SAAS商城小程序开发工具推荐:附商城小程序开发教程