前端经典面试题合集, 说说你对 JS 模块化方案的理解,比如 CommonJS,AMD,CMD,ES Module 分别是什么?
前端经典面试题合集, 说说你对 JS 模块化方案的理解,比如 CommonJS,AMD,CMD,ES Module 分别是什么?
QA
Step 1
Q:: 说说你对 JS 模块化方案的理解,比如 CommonJS、AMD、CMD、ES Module 分别是什么?
A:: JavaScript 的模块化方案是为了管理代码的组织和复用而提出的。CommonJS 是 Node.js 的模块系统,采用同步加载的方式;AMD (Asynchronous Module Definition) 是浏览器端的模块化规范,采用异步加载的方式,常用于前端开发中;CMD (Common Module Definition) 主要用于 SeaJS 中,和 AMD 相似但支持按需加载;ES Module 是原生的 JavaScript 模块化标准,支持静态分析,现代浏览器和 Node.
js 都支持。
Step 2
Q:: CommonJS 的主要特点是什么?
A:: CommonJS 规范的模块是同步加载的,这在服务端环境(如 Node.
js)中适用,因为文件都在本地。每个文件都是一个模块,使用 require
来加载模块,使用 module.exports
或 exports
来导出模块。
Step 3
Q:: AMD 和 CMD 的区别是什么?
A:: AMD 推崇依赖前置,在定义模块时就要声明其依赖;而 CMD 推崇依赖就近,只有在使用某个模块时才去加载。AMD 适合那些依赖关系复杂的项目,而 CMD 更适合依赖较少或动态加载需求多的项目。
Step 4
Q:: ES Module 的特点和优势是什么?
A:: ES Module 是 JavaScript 原生支持的模块化系统,具有以下特点:支持静态分析,有利于工具进行优化(如 Tree Shaking);通过 import
和 export
关键字进行模块导入导出;模块是异步加载的;ES Module 支持浏览器直接引入(通过 type='module'
),无需打包工具。