import && export
概述
意义:模块体系的构建者
注意:模块自动采用严格模式
通过export
命令显式指定输出的代码,再通过import
命令输入
export
作用
模块是一个独立文件,所以想在其他文件中获取本文件的某个变量,就需要把变量 export 出去
写法
可以一个一个的 export 或者一次性 export 多个变量,
//第一种
export const name = 'cheri'
export let age = 18
// 第二种
const name = 'cheri'
let age = '18'
export { name, age }
通常建议批量export 变量,因为在文件尾部,可以明确哪些变量被 export 了
除了变量,函数也可以被输出
export function multiply(x, y) {
return x * y;
};
别名(as)
为了让输出的变量更清晰易懂,我们还可以为它重命名
function f1(){}
function f2(){}
export {
f1 as addFunc
f2 as chengfaFunc
f2 as multiplyFunc
}
我们可以把一个变量或函数起多个不同的名字,对外输出多次
import
作用
如果模块通过 export 定义了对外接口,其他模块就可以通过 import 加载该模块
写法
import {name, age} from './profile.js';
在载入的时候,可以用 as 重命名
import {name as surname, age} from './profile.js';
import命令输入的变量都是只读的,因为它的本质是输入接口
但是如果输入的变量是一个对象,则修改这个对象的内容是合法的
import {age} from './profile.js';
// age 是一个 number
age = 20 // 报错
import {ageObj} from './profile.js';
//ageObj 是一个 object
ageObj.number = 20 // 不报错
import 的 from
import后面的from指定模块文件的位置,可以是相对路径,也可以是绝对路径,.js后缀可以省略
如果 from 的是一个模块名,不带有路径,则必须有配置文件,不然引擎不知道怎么获取该模块
import 的提升
不管在文件的什么位置写 import ,都会提升到文件顶部
foo();
import { foo } from 'my_module'; //不会报错,因为。import 会提升
import 的静态性
import 是静态之行的,不能使用变量和表达式
// 报错
import { 'f' + 'oo' } from 'my_module';
// 报错
let module = 'my_module';
import { foo } from module;
// 报错
if (x === 1) {
import { foo } from 'module1';
} else {
import { foo } from 'module2';
}
import 的加载
仅执行 loadsh 模块,但没有输入值
import 'lodash';
多次 import ,只会执行一次
import 'lodash';
import 'lodash';
import { foo } from 'my_module';
import { bar } from 'my_module';
// 等同于
import { foo, bar } from 'my_module';
整体加载
用星号(*)指定一个对象,所有输出值都加载在这个对象上面。
比如一个模块输出了两个方法
export function area(radius) {
return Math.PI * radius * radius;
}
export function circumference(radius) {
return 2 * Math.PI * radius;
}
另一个模块在引入的时候,可以一个一个的引入,也可以使用 * 制定一个对象,一次性引入
// 一个一个引入
import { area, circumference } from './circle';
console.log('圆面积:' + area(4));
console.log('圆周长:' + circumference(14));
//批量引入
import * as cirle from './circle'
console.log('圆面积:' + circle.area(4));
console.log('圆周长:' + circle.circumference(14));
import * as circle from './circle';
// 下面两行都是不允许的
circle.foo = 'hello';
circle.area = function () {};