ES6模块之export和import详解
ES6模块之export和import详解:https://blog.csdn.net/qq_28506819/article/details/75733601
ES6中的模块即使一个包含JS代码的文件,在这个模块中所有的变量都是对其他模块不可见的,除非我们导出它。ES6的模块系统大致分为导出(export)和导入(import)两个模块。
1、模块导出(export)
你可以
导出
所有的最外层函数
、类
以及var
、let
或const
声明的变量。ES6模块只支持静态导入和导出,你只可以在模块的最外层作用域使用
import
和export
,不可在条件语句中使用,也不能在函数作用域中使用import
。所有导出的标识符一定要在源代码中明确地导出它们的名称,你不能通过编写代码遍历一个数组然后用数据驱动的方式导出一堆名称。如下导出是错误的。-
function squre() {};
-
if(true) {
-
export {squre};
-
}
1、名字导出(name export)
名字导出可以在模块中导出多个声明。
-
//------ 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
-
//------ 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模块将变成这样。
-
//------ main.js ------
-
import * as lib from 'lib';
-
console.log(lib.square(10)); //100
-
console.log(lib.add(2,4)); //6
2、默认导出(default export)
一个模块只能有一个默认导出,对于默认导出,导入的名称可以和导出的名称不一致,这对于导出匿名函数或类非常有用。-
//------ myFunc.js ------
-
export default function() {...};
-
-
//------ main.js ------
-
import myFunc from 'myFunc';
-
myFunc();
当然也可以使用混合的导出。
-
//------ lib.js ------
-
export default function() {...};
-
export function each() {...};
-
-
//------ main.js ------
-
import _,{ each } from 'lib';
2、重命名export和import
为了解决导出命名冲突的问题,ES6为你提供了重命名的方法解决这个问题,当你在导入名称时可以这样做:
-
// 这两个模块都会导出以`flip`命名的东西。
-
// 要同时导入两者,我们至少要将其中一个的名称改掉。
-
import {flip as flipOmelet} from "eggs.js";
-
import {flip as flipHouse} from "real-estate.js";
-
function v1() { ... }
-
function v2() { ... }
-
-
export {
-
v1 as streamV1,
-
v2 as streamV2,
-
v2 as streamLatestVersion
-
};
-
import { default as foo } from 'lib';
-
import foo from 'lib';
-
//------ module1.js ------
-
export default 123;
-
-
//------ module2.js ------
-
const D = 123;
-
export { D as default };
3、作为中转模块导出
有时候为了避免上层模块导入太多的模块,我们可能使用底层模块作为中转,直接导出另一个模块的内容如下:
-
//------ 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模块的内容。
参考链接:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)