ES6_11_Module 的语法(import, export,export default )

向量数据库大模型云通信

点击“前端自学社区”查看更多精彩

picture.image

本章将介绍学习 模块加载Module 的使用, 将一个大文件,分成多个小文件,像拼积木一样组合起来使用。

定义

  
Module将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。  
在 ES6 之前,模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。  
  
// ES6模块  
import { stat, exists, readFile } from 'fs';  
  
加载fs 模块得三个方法,其他方法不加载, 实现了模块的静态加载  

export 命令

  
模块功能主要由两个命令构成:exportimportexport命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。  
  
一个模块内部的成员想要被外部访问,就需要使用 export 导出  
  
var firstName = 'Michael';  
var lastName = 'Jackson';  
var year = 1958;  
  
export { firstName, lastName, year };  
  
//注意  
1.export输出的变量就是本来的名字,但是可以使用as关键字重命名。  
  
function v1() { ... }  
function v2() { ... }  
  
export {  
  v1 as streamV1,  
  v2 as streamV2,  
  v2 as streamLatestVersion  
};  
  
在导入的文件内,可以直接使用as 后的变量名 使用  

export 导出 格式

  
//变量  
  
var name  = '张三'  
var age = 22  
  
export { name , age }  
  
  
//函数  
1. export function  getAge() {}  
  
2. function getAge() {}       
导出 export {getAge}  
  
// 类  
var obj  = new Object()  
  
export { obj}  
  
  
//注意  
export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错,  
  
function foo() {  
  export default 'bar' // SyntaxError  
}  
foo()  

import 命令

定义

  
使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。  
  
/ main.js  
import { firstName, lastName, year } from './profile.js';  
  
function setName(element) {  
  element.textContent = firstName + ' ' + lastName;  
}  
  
  
  
# 注意  
1. import命令输入的变量都是只读的,因为它的本质是输入接口。不允许在加载模块的脚本里面,改写接口。  
  
import {a} from './xxx.js'  
  
a = {}; // Syntax Error : 'a' is read-only;      
  
  
2.如果多次重复执行同一句import语句,那么只会执行一次,而不会执行多次。  

模块的整体加载

除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

模块整体加载所在的那个对象,它是可以静态分析的,所以不允许运行时改变。

  
// circle.js  
  
export function area(radius) {  
  return Math.PI * radius * radius;  
}  
  
export function circumference(radius) {  
  return 2 * Math.PI * radius;  
}  

  
import * as circle from './circle';  
  
console.log('圆面积:' + circle.area(4));  
console.log('圆周长:' + circle.circumference(14));  

export default 命令 指定默认输出

使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。
而使用 export default 命令, 用户不需要内部 的变量名 或者 函数名,可以直接导入使用

  1. 使用 import 命令。变量名 或者 函数 需要 放在 { } 里

import { name , age } from './test.js' 2. 使用 export default 命令, 用户可以直接使用一个自定义的变量名直接使用该文件的中提供的方法或者变量/

import age as getAge from './test.js'

使用时,直接调用 getAge() , 上面代码 将 age 重命名为 getAge

注意
  
1.export default命令其实只是输出一个叫做default的变量,所以它后面不能跟变量声明语句。  
  
// 正确  
var a = 1;  
export default a;  
  
// 错误  
export default var a = 1;  
  
// 正确  
export default 42;  
  
// 报错  
export 42;  
  
2.export default也可以用来输出类。  
  
// MyClass.js  
export default class { ... }  
  
// main.js  
import MyClass from 'MyClass';  
let o = new MyClass();  

export 与 import 的复合写法

如果在一个模块之中,先输入后输出同一个模块,import语句可以与export语句写在一起。

  
export { foo, bar } from 'my\_module';  
  
// 可以简单理解为  
import { foo, bar } from 'my\_module';  
export { foo, bar };  

跨模块常量,一个模块中的变量 / 方法 多个模块使用

  
可以这样写  
  
// constants.js 模块  
export const A = 1;  
export const B = 3;  
export const C = 4;  
  
// test1.js 模块  
import * as constants from './constants';  
console.log(constants.A); // 1  
console.log(constants.B); // 3  
  
// test2.js 模块  
import {A, B} from './constants';  
console.log(A); // 1  
console.log(B); // 3  

picture.image

往期精彩回顾

picture.image

Android 基础入门干货分享 (UI控件篇)

十月份复盘总结

ES6_01_变量和常量的使用 更多精彩内容 尽在公众号中

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
高性能存储虚拟化方案 NVMe over Fabric 在火山引擎的演进
在云计算中,虚拟化存储扮演着重要角色,其中 iSCSI 协议在业界开放、流行多年。近年来,拥有更优性能的 NVMe over Fabrics 协议也得到了发展。本次分享介绍了 NVMe over Fabrics 在云原生和虚拟化方向的演进工作和成果。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论