微服务 教程
1085个小节阅读:196.4k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require
、Python 的import
,甚至就连 CSS 都有@import
,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍
ES6 模块是通过export
命令显式指定输出的代码,再通过import
命令输入。
xxxxxxxxxx
export var Hello = "hello" // hello.js文件
import { Hello } from "./hello.js" // index.js文件
我们采用Nodejs方式进行测试Module语法
但是nodejs采用的是CommonJS的模块化规范,使用require引入模块;而import是ES6的模块化规范关键字。想要使用import,必须引入babel转义支持,通过babel进行编译,使其变成node的模块化代码。
疑惑:为啥不用前端方式测试,前端方式测试会更加麻烦
第一步:全局安装babel-cli npm install -g babel-cli
第二步:安装 babel-preset-env npm install -D babel-preset-env
第三步:运行代码 babel-node --presets env index.js
export命令导出变量
xxxxxxxxxx
export var firstName = 'sxt';
export var lastName = 'itbaizhan';
export var year = 2000;
export命令导出函数
xxxxxxxxxx
export function add(x, y) {
return x + y;
};
使用export
命令定义了模块的对外接口以后,其他 JS 文件就可以通过import
命令加载这个模块
xxxxxxxxxx
// name.js
export var firstName = 'sxt';
export var lastName = 'itbaizhan';
export var year = 2000;
// main.js
import { firstName, lastName, year } from './profile.js';
如果想为输入的变量重新取一个名字,import
命令要使用as
关键字,将输入的变量重命名
xxxxxxxxxx
// value.js
export var value = 1;
// main.js
import { value as val } from './value.js';
除了指定加载某个输出值,还可以使用整体加载,即用星号(*
)指定一个对象,所有输出值都加载在这个对象上面
xxxxxxxxxx
// circle.js
export function area(radius) {
return Math.PI * radius * radius;
}
export function circumference(radius) {
return 2 * Math.PI * radius;
}
// main.js
import { area, circumference } from './circle';
// 可以修改如下
import * as circle from './circle';
从前面的例子可以看出,使用import
命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。但是,用户肯定希望快速上手,未必愿意阅读文档,去了解模块有哪些属性和方法
为了给用户提供方便,让他们不用阅读文档就能加载模块,就要用到export default
命令,为模块指定默认输出。
xxxxxxxxxx
// export-default.js
export default function () {
console.log('foo');
}
其他模块加载该模块时,import
命令可以为该匿名函数指定任意名字
xxxxxxxxxx
// import-default.js
import customName from './export-default';
customName(); // 'foo'
实时效果反馈
1. 下列那个不属于ES6的Module语法的关键字:
A export
B import
C export default
D require
答案
1=>D