当前位置:首页 > 编程笔记 > 正文
已解决

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%的人还看了

猜你感兴趣

版权申明

本文"ES6 的 export / import 常用方式总结":http://eshow365.cn/6-14495-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!