考核内容: module模块的使用和实现
题发散度: ★★★
试题难度: ★★★
解题思路:
在 ES6 之前,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、Python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍。
ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入。
一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。
// ./file/m1.js
let firstName = 'ke';
let lastName = 'shuke';
let year = 2020;
let nickname="舒克"
export { firstName, lastName, year };
// ES6模块 main.js
import { firstName, lastName, year } from './file/m1';
上面代码的实质是从m1模块加载 3 个方法,其他方法不加载。这种加载称为“编译时加载”或者静态加载,即 ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高。当然,这也导致了没法引用 ES6 模块本身,因为它不是对象。
浏览器实现ES6 module必须,使用firefox54以上和chrome60以上,并且chrome仍然有问题,跨域会报错,得放在服务器下测试.
ES6 的模块特性(module) 开始在浏览器端实现
浏览器
备注
可以看到module模块在浏览器支持方面并不是很好;
参考代码:
//node环境下测试:main.js
//m1.js
答案:
D、目前大部分主流浏览器都支持module模块