博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6模块之export和import详解
阅读量:5146 次
发布时间:2019-06-13

本文共 2768 字,大约阅读时间需要 9 分钟。

文章转载自:https://blog.csdn.net/qq_28506819/article/details/75733601

 

ES6中的模块即使一个包含JS代码的文件,在这个模块中所有的变量都是对其他模块不可见的,除非我们导出它。ES6的模块系统大致分为导出(export)和导入(import)两个模块。

1、模块导出(export)

你可以
导出所有的最外层
函数
以及
var
let
const声明的变量。
ES6模块只支持静态导入和导出,你只可以在模块的最外层作用域使用
import
export,不可在条件语句中使用,也不能在函数作用域中使用
import。所有导出的标识符一定要在源代码中明确地导出它们的名称,你不能通过编写代码遍历一个数组然后用数据驱动的方式导出一堆名称。如下导出是错误的。
[javascript] 
 
 
function squre() {};  if(true) {      export {squre};  }

 

 
ES6的导出分为名字导出和默认导出

1、名字导出(name export)

名字导出可以在模块中导出多个声明。
[javascript] 
 
 
//------ lib.js ------  export const sqrt = Math.sqrt;  export function square(x) {      return x * x;  }  export function add (x, y) {      return x + y;  }    //------ main.js ------  import { square, add } from 'lib';  console.log(square(10)); //100  console.log(add(2,4));  //6

 

这样导入的变量名必须和导出的名称一致。以上对于每一个要导出的变量都加了export,我们也可以直接导出一个列表,例如上面的lib.js可以改写成:
[javascript] 
 
 
//------ lib.js ------  const sqrt = Math.sqrt;  function square(x) {      return x * x;  }  function add (x, y) {      return x + y;  }  export {sqrt, square, add}

 

export列表可以在模块文件最外层作用域的每一处声明,不一定非要把它放在模块文件的末尾。
也可以直接导入整个模块,此时的main.js模块将变成这样。
[javascript] 
 
 
//------ main.js ------  import * as lib from 'lib';  console.log(lib.square(10)); //100  console.log(lib.add(2,4));  //6

 

 

2、默认导出(default export)

一个模块只能有一个默认导出,对于默认导出,导入的名称可以和导出的名称不一致,这对于导出匿名函数或类非常有用。
[javascript] 
 
 
//------ myFunc.js ------  export default function() {...};    //------ main.js ------  import myFunc from 'myFunc';  myFunc();

 

注意这里默认导出不需要用{}。
当然也可以使用混合的导出。
[javascript] 
 
 
//------ lib.js ------  export default function() {...};  export function each() {...};    //------ main.js ------  import _,{ each } from 'lib';

 

2、重命名export和import

为了解决导出命名冲突的问题,ES6为你提供了重命名的方法解决这个问题,当你在导入名称时可以这样做:
[javascript] 
 
 
// 这两个模块都会导出以`flip`命名的东西。  // 要同时导入两者,我们至少要将其中一个的名称改掉。  import {flip as flipOmelet} from "eggs.js";  import {flip as flipHouse} from "real-estate.js";

 

同样,当你在导出的时候也可以重命名。你可能会想用两个不同的名称导出相同的值,这样的情况偶尔也会遇到:
[javascript] 
 
 
function v1() { ... }  function v2() { ... }    export {    v1 as streamV1,    v2 as streamV2,    v2 as streamLatestVersion  };

 

对于默认导出,只是导出了一个特殊的名字叫 default,你也可以就直接用他的名字,把它当做命名导出来用,下面两种写法是等价的:
[javascript] 
 
 
import { default as foo } from 'lib';  import foo from 'lib';

 

也可以把名称as为default来默认导出:
[javascript] 
 
 
//------ module1.js ------  export default 123;    //------ module2.js ------  const D = 123;  export { D as default };

 

3、作为中转模块导出

有时候为了避免上层模块导入太多的模块,我们可能使用底层模块作为中转,直接导出另一个模块的内容如下:
[javascript] 
 
 
//------ myFunc.js ------  export default function() {...};    //------ lib.js ------  export * from 'myFunc';  export function each() {...};    //------ main.js ------  import myFunc,{ each } from 'lib';

 

 
这样main.js只需导入lib模块即可,虽然myFunc模块从lib模块导出,但是lib却不能使用myFunc模块的内容

转载于:https://www.cnblogs.com/tarrying/p/8882584.html

你可能感兴趣的文章
老李分享:5个衡量软件质量的标准
查看>>
Xcode部分插件无法使用识别的问题
查看>>
set学习记录
查看>>
用函数写注册功能
查看>>
JVM笔记4:Java内存分配策略
查看>>
IE8 window.open 不支持此接口 的问题解决
查看>>
Django -- 发送HTML格式的邮件
查看>>
最近面试问题汇总
查看>>
ORM版学员管理系统3
查看>>
修改安卓虚拟机系统镜像
查看>>
windows 2003 Server平台Delphi程序不支持直接调用webservice
查看>>
电子书下载:Professional ASP.NET Design Patterns
查看>>
random 产生一个随机数的方法
查看>>
RST_n的问题
查看>>
欢迎来我的#百度相册#时光轴,坐上时光机,与我一起穿梭时空!
查看>>
------结对作业代码复审-----
查看>>
ASP.NET 获得当前网页名字
查看>>
windows pear 安装
查看>>
22Spring基于配置文件的方式配置AOP
查看>>
H5页面在微信端的分享
查看>>