export 命令

ES6的模块功能主要由两个命令构成:exportimportexport命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。

  1. // profile.js
  2. export var firstName = 'Michael';
  3. export var lastName = 'Jackson';
  4. export var year = 1958;

上面代码是profile.js文件,保存了用户信息。ES6 将其视为一个模块,里面用export命令对外部输出了三个变量。

export的写法,除了像上面这样,还有另外一种。

  1. // profile.js
  2. var firstName = 'Michael';
  3. var lastName = 'Jackson';
  4. var year = 1958;
  5. export {firstName, lastName, year};

上面代码在export命令后面,使用大括号指定所要输出的一组变量。它与前一种写法(直接放置在var语句前)是等价的,但是应该优先考虑使用这种写法。因为这样就可以在脚本尾部,一眼看清楚输出了哪些变量。

ES6 export命令除了输出变量,还可以输出函数或类(class)。

  1. export function multiply(x, y) {
  2. return x * y;
  3. };

上面代码对外输出一个函数multiply

通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名。

  1. function v1() { ... }
  2. function v2() { ... }
  3. export {
  4. v1 as streamV1,
  5. v2 as streamV2,
  6. v2 as streamLatestVersion
  7. };

上面代码使用as关键字,重命名了函数v1v2的对外接口。重命名后,v2可以用不同的名字输出两次。

需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。

  1. // 报错
  2. export 1;
  3. // 报错
  4. var m = 1;
  5. export m;

上面两种写法都会报错,因为没有提供对外的接口。第一种写法直接输出 1,第二种写法通过变量m,还是直接输出 1。1只是一个值,不是接口。正确的写法是下面这样。

  1. // 写法一
  2. export var m = 1;
  3. // 写法二
  4. var m = 1;
  5. export {m};
  6. // 写法三
  7. var n = 1;
  8. export {n as m};

上面三种写法都是正确的,规定了对外的接口m。其他脚本可以通过这个接口,取到值1。它们的实质是,在接口名与模块内部变量之间,建立了一一对应的关系。

同样的,functionclass的输出,也必须遵守这样的写法。

  1. // 报错
  2. function f() {}
  3. export f;
  4. // 正确
  5. export function f() {};
  6. // 正确
  7. function f() {}
  8. export {f};

另外,export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。

  1. export var foo = 'bar';
  2. setTimeout(() => foo = 'baz', 500);

上面代码输出变量foo,值为bar,500 毫秒之后变成baz

这一点与 CommonJS 规范完全不同。CommonJS 模块输出的是值的缓存,不存在动态更新,详见下文《Module 的加载实现》一节。

最后,export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错,下一节的import命令也是如此。这是因为处于条件代码块之中,就没法做静态优化了,违背了 ES6 模块的设计初衷。

  1. function foo() {
  2. export default 'bar' // SyntaxError
  3. }
  4. foo()

上面代码中,export语句放在函数之中,结果报错。

es6 export 命令相关推荐

  1. java 无法执行export 命令_模块中的export、import以及复合模式的使用方法

    export:规定模块对外接口 ①默认导出:export default Test(导入时可指定模块任意名称,无需知晓内部真实名称) ②单独导出:export const name = "B ...

  2. 五、Vue模块化开发学习笔记——JavaScript原始功能、匿名函数的解决方案、使用模块作为出口、CommonJS、ES6 export和import的使用

    一.JavaScript原始功能 -在网页开发的早期,js制作作为一种脚本语言,做一些简单的表单验证或动画实现等,那个时候代码还是很少的. 那个时候的代码是怎么写的呢? 直接将代码写在<scri ...

  3. es6 import 命令

    import 命令 使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块. // main.js import {firstName, lastName ...

  4. Linux中使用export命令设置环境变量

    Linux export 命令 2011-08-31 22:36:39|  分类: 命令总结|举报|字号 订阅 功能说明:设置或显示环境变量. ############################ ...

  5. java export命令_Linux 命令详解(一)export 命令

    一.Windows 环境变量 1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似 ...

  6. 【Linux】5.linux下的export命令和环境变量

    linux下的export命令和环境变量 linux中在 profile 或者 bashrc 或者其他类似的文件中设置环境变量时(比如PATH),如果没有export,那么只能在直接启动的shell中 ...

  7. export命令添加和删除环境变量

    export命令 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] 补充说明:在shell中执行程序时,shell会提供一组环境变量. export可新增 ...

  8. 【Linux】一步一步学Linux——export命令(211)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 export命令用于将shell变量输出为环境变量,或者将 ...

  9. Linux export 命令用法

    Linux export 命令用法 Linux export 命令用于设置或显示环境变量. 在 shell 中执行程序时,shell 会提供一组环境变量.export 可新增,修改或删除环境变量,供后 ...

最新文章

  1. [置顶] 浅析objc的消息机制
  2. 平板电脑计算机怎么关按键音,平板电脑输入法怎么设置【图解】
  3. Java对象在Java虚拟机的创建过程
  4. 网易云音乐测开面试题整理
  5. Linux系统rootpassword改动
  6. inode mac客户端_淘宝直播PC客户端适合哪些场景使用?
  7. 对 SharePoint WebService 的调用
  8. 攻击防御实例——SQL注入
  9. dlna和miracast可以共存吗_关于无线显示技术,AirPlay,DLNA,Miracast,WiDi 等有何异同?...
  10. 利用C语言读取WAV文件
  11. 用友适合套打的打印机所有型号和问题
  12. abb机器人编程指令goto指令_abb机器人编程指令——轨迹偏移使用的指令以及moveL指令...
  13. 出席华盛顿大学以人为本用户体验设计领导力活动 探讨区块链的用户体验 | ArcBlock 活动...
  14. 2018-11-15-mqtt-mosquitto系列11之配置基于ca证书的桥接
  15. 电脑网页无法解析服务器dns,电脑无法解析服务器dns地址怎么办
  16. Chrome 66之后禁止网页声音自动播放问题解决
  17. 从向量空间的角度来理解方程组有无解的问题
  18. 使用服务器端控制AJAX页面缓存
  19. 电磁场与电磁波实验 01 - | 位移电流测量及电磁场与电磁波的存在实验
  20. 以太坊 POA 部署

热门文章

  1. 减少浏览器兼容性问题
  2. ABP源码分析二十五:EventBus
  3. Linux网络服务-Web Service之【apache的功能、安装、配置文件介绍以及实验实例】(三)...
  4. 我遇到了Hibernate异常
  5. Directx11教程(65) 渲染到纹理
  6. 转载一个程序员的游戏之路
  7. 你需要知道的基础算法知识——STL和基础数据结构(五)
  8. anaconda的安装与使用详细教程
  9. 日志服务发布Windows Logtail,完整支持两大平台
  10. 阿里云centos7使用yum安装mysql的正确姿势