js中外部js如何引入

js中外部js如何引入
最新回答
夏日梧桐雨

2021-08-01 01:08:11

在 JavaScript 中,引入外部 JS 文件主要有以下六种方式,具体选择需根据需求和浏览器兼容性决定:

1. <script> 标签(基础引入)
  • 核心作用:最基础的引入方式,直接通过 HTML 的 <script> 标签加载外部 JS 文件。
  • 代码示例:<script src="external.js"></script>
  • 特点

    默认同步加载,会阻塞 HTML 解析,直到 JS 文件加载并执行完毕。

    适用于对加载顺序无特殊要求的场景。

2. defer 属性(延迟执行)
  • 核心作用:延迟 JS 文件的执行,直到 HTML 解析完成(DOM 构建完毕)后再按顺序执行册旦枯。
  • 代码示例:<州洞script defer src="external.js"></script>
  • 特点

    脚本在 HTML 解析期间并行下载,但延迟到 DOM 加载完成后执行。

    多个带 defer 的脚本会按文档顺序执行。

    适用于需要操作 DOM 但不依赖其他脚本的场景。

3. async 属性(异步加载)
  • 核心作用:异步加载 JS 文件,下载完成后立即执行,不阻塞 HTML 解析。
  • 代码示例:<script async src="external.js"></script>
  • 特点

    脚本下载期间不阻塞页面渲染,但执行时机不确定(可能随时中断 HTML 解析)。

    多个带 async 的脚本执行顺序不固定,适用于独立迟弊模块(如统计脚本)。

    适用于对执行顺序无要求且无需操作 DOM 的场景。

4. import() 函数(动态导入)
  • 核心作用:ES6 提供的动态导入语法,按需加载 JS 模块,返回 Promise。
  • 代码示例:import('external.js') .then((module) => { // 使用模块 }) .catch((error) => { // 处理错误 });
  • 特点

    异步加载,支持条件导入或按需加载。

    适用于代码分割、路由级加载等场景。

    需配合现代浏览器或打包工具(如 Webpack)使用。

5. ES6 模块定义(type="module")
  • 核心作用:通过 <script type="module"> 引入 ES6 模块,支持静态导入(import)和导出(export)。
  • 代码示例:<script type="module" src="external.js"></script>
  • 特点

    默认启用严格模式,支持顶层 await。

    模块作用域隔离,避免全局污染。

    需现代浏览器支持,且文件需通过 CORS 加载(如本地开发需配置服务器)。

6. AMD 模块(异步模块定义)
  • 核心作用:通过 require.js 等库实现异步模块加载,适用于旧项目或特定环境。
  • 代码示例:require(['external'], function(external) { // 使用模块});
  • 特点

    依赖 require.js 等库,需提前配置路径。

    适用于传统前端架构或需要兼容旧浏览器的场景。

选择建议
  • 现代浏览器:优先使用 async、defer 或 ES6 模块(type="module")。
  • 动态加载:选择 import() 函数实现按需加载。
  • 兼容旧环境:考虑 AMD 模块或打包工具(如 Babel)转译代码。
  • 性能优化:结合 async/defer 和代码分割技术减少首屏加载时间。

通过合理选择引入方式,可平衡加载效率、执行顺序和浏览器兼容性。