export后面跟变量声明语句

  1. // module.js
  2. export var name = 'leon';
  3. export const age = 18;
  4. // main.js
  5. import {name, age} from './module.js';
  6. console.log(name, age) //leon 18

上面例子等同于

  1. // module.js
  2. var name = 'leon'
  3. const age = 18
  4. export {name, age}
  5. // main.js
  6. import {name, age} from './module.js';
  7. console.log(name, age) //leon 18

注意如下会报错

  1. // module.js
  2. var name = 'leon'
  3. export name
  4. // 报错,export后面不能直接使用变量名
  5. // main.js
  6. import name from './module.js';
  7. // 报错

可以理解为import本质上输入的是export对象,name是挂载在export下的一个属性,引入{name}则表示从export对象中读取name属性。
除了分别引入还可以整体引入:

  1. // main.js
  2. import * as person from './a'
  3. console.log(person.name, person.age); // leon 18
  4. //这种写法表示以person变量名接收export输出的{name,age}集合*

export后面跟default关键字

  1. // module.js
  2. var name = 'leon'
  3. const age = 18
  4. export default {
  5. name,
  6. age
  7. }
  8. // module2.js
  9. function setGender(gender,person) {
  10. person.gender = gender
  11. }
  12. export default setGender
  13. // main.js
  14. import person from './module'
  15. import setGender from './module2'
  16. setGender('male', person);
  17. console.log(person) // {name: leon, age: 18, gender: 'male'}

可以理解为将{name, age}对象挂载到default,引入时会默认引入export对象下的default属性,所以person能接收到default这个对象。

Q: 为什么不加default关键字就必须要使用 import {name, age} from ''呢?

A: 因为没有关键字default时,输出export对象就是{name, age}对象,那么引入的时候必须这么引。否则import name from ''时会去exportdefault属性下去找name,真实并没有,所以会报错

注意,不加default关键字时直接{}引入变量名必须与模块中输出的一致,如果想更换,可以使用as语法

  1. //module.js
  2. var name = 'leon'
  3. const age = 18
  4. export {name, age}
  5. //main.js
  6. import {name as n, age as a} from './module';
  7. console.log(n, a); // leon 18

或者

  1. //module.js
  2. var name = 'leon'
  3. const age = 18
  4. export {
  5. name as n,
  6. age as a
  7. }
  8. // main.js
  9. import {n, a} from './module'
  10. console.log(n, a); // leon 18