已解决
ES6 的 export / import 常用方式总结
来自网友在路上 138838提问 提问时间:2023-09-27 07:39:24阅读次数: 38
最佳答案 问答题库388位专家为你答疑解惑
目录
- 1,注意点
- export
- import
- export default
- 2,常用方式
1,注意点
export
1,export 命令只能输出3种接口:
- 函数(Functions)
- 类(Classes)
- var、let、const 声明的变量(Variables)。
2,export 命令输出的接口,与其对应的值是动态绑定关系。即通过该接口,可以取到模块内部实时的值。
// test1.js
export var foo = "cat";
setTimeout(() => (foo = "dog"), 500);
import { foo } from "./test1.js";setTimeout(() => {console.log(foo); // dog
}, 1000);
3,export 命令规定:对外的接口,必须与模块内部的变量建立一一对应关系。
也就是说,如果要导出上面的3种接口,只能使用下面3种方式
export var firstName = "cat"; // 直接导出function add(x, y) {return x + y;
}
export { add }; // 放到对象中class MyName {}
export { MyName as MyNameFaker }; // 使用别名
而不是这样:
// 报错
export 1;// 报错
var m = 1;
export m;// 报错
function f() {}
export f;
4,export 命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错。
这是因为处于条件代码块之中,就没法做静态优化了,违背了 ES6 模块的设计初衷。
function foo() {export default "bar"; // SyntaxError
}
import
以下面的 test1.js
导出为例
// test1.js
export var firstName = "cat"; // 直接导出
export var obj = { name: '下雪天的夏风' }
function add(x, y) {return x + y;
}
export { add }; // 放到对象中
1,通过 {}
来指定从其他模块导入的变量名。变量名必须与被导入模块对外接口的名称相同。
2,通过 as
关键字,将导入的变量重命名。
import { firstName as myname } from './test1.js';
3,导入的变量都是只读的,因为它的本质是导入接口。
import { firstName, obj } from './test1.js'
obj.name = 123; // ok
firstName = {}; // TypeError: Assignment to constant variable;
4,import
有变量提升的效果,会提升到整个模块的头部,首先执行。
add(1, 1);
import { add } from "./test1.js";
export default
1,一个模块只能有一个默认输出,因此 export default
命令只能使用一次。
2,本质上:export default
就是输出一个叫做 default
的变量或方法。所以
// test1.js
function add(x, y) {return x + y;
}
export default add;
// 等价于
export { add as default };
import otherName from './test1.js'; // otherName 就是 add 函数。
// 等价于
import { default as otherName } from "./test1.js";
同理
// 可行
export default 123;
// 报错
export 123;
// 正确
export var a = 1;
// 正确
var b = 1;
export default b;// 错误
export default var a = 1;
3,import
可同时导入默认导出,和其他接口。
// test1.js
export var a = 1;function add(x, y) {return x + y;
}
export default add;
import otherName, { a } from './test1.js'; // otherName 就是 add 函数。
2,常用方式
举例1,
// test.js
export var firstName = "cat";function add(x, y) {return x + y;
}
export { add };class MyName {}
export { MyName as MyNameFaker };
import { firstName, add, MyNameFaker } from "./test.js";
举例2,
// test1.js
export const firstName = "cat";export function add(x, y) {return x + y;
}export default {name: "123",
};
// test2.js
export * from './test1.js' // 导出除默认导出之外的所有导出。import a from "./test1.js"; // a: {name: '123'}
// test3.js
import { firstName, add } from "./test2.js";
// SyntaxError: The requested module './test2.js' does not provide an export named 'default'
import a from "./test2.js";
举例3,
// test1.js
export var a = 1;
function add(x, y) {return x + y;
}
export default add;
// test2.js
export { default as addFaker } from "./test1.js";
import { addFaker } from "./test2.js"; // addFaker 就是 add 函数
而如果
// test2.js
export * as all from "./test1.js";
import { all } from "./test2.js"; // all 是 { a: 1, default: add函数 }
参考 - 阮一峰-es6
查看全文
99%的人还看了
相似问题
- go语言实现高性能自定义ip管理模块(ip黑名单)
- 【Django使用】4大模块50页md文档,第4篇:Django请求与响应和cookie与session
- 【python学习】基础篇-常用模块-pickle模块:序列化和反序列化
- #gStore-weekly | gAnswer源码解析 调用NE模块流程
- 【前端知识】Node——events模块的相关方法
- 使用Python的turtle模块绘制玫瑰花图案(含详细Python代码与注释)
- 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
- SpringBoot学习笔记-配置MySQL与实现注册登录模块(中)
- 一个奇怪的蓝牙模块分析记录
- 前端JS模块化对外暴露的三种方法
猜你感兴趣
版权申明
本文"ES6 的 export / import 常用方式总结":http://eshow365.cn/6-14495-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!