es6模块

export

ES6模块的设计思想是尽量静态化,使编译时就能确定模块间的依赖关系,输入和输出变量。CommonJS和AMD都是运行时确定这些关系。
export命令规定的是对外的 接口
export语句输出的接口,与其对应的值是 动态绑定关系,即通过该接口,可以取到 模块内部实时的值
CommonJS 模块输出的是 值的缓存,不存在动态更新
export 命令必须要处于模块顶层,否则会报错。

import

import命令具有 提升效果,会提升到整个模块的头部,首先执行

foo();
import { foo } from 'my_module';

这种行为的本质是,import命令是编译阶段执行的,在代码运行之前。
import命令会执行导入的模块
如果同时执行多个import语句,则只会执行一次,而不会重复执行

import loadash;
import loadash;

以上代码只会执行一次,虽然import了两次。
import语句是 Singleton 模式

import { foo } from ''modulename";
import { bar } from "modulename";
//等价于
import { bar,foo } from "modulename";

上面代码中,虽然foo和bar在两个语句中加载,但是它们对应的是同一个my_module实例。也就是说,import语句是 Singleton 模式。
模块整体加载所在的那个对象(上例是circle),应该是可以静态分析的,所以不允许运行时改变。下面的写法都是不允许的。

import * as circle from './circle';

// 下面两行都是不允许的
circle.foo = 'hello';
circle.area = function () {};

export default

export default命令,为模块指定默认输出。显然,一个模块只能有一个默认输出,因此export default命令只能使用一次。
本质上, export default就是输出一个叫做default的变量或方法,然后系统允许你为它取任意名字

import()函数

import()函数完成动态异步加载模块(运行时加载),import()返回一个 Promise 对象
ps: import与require的区别是前者异步加载,后者是同步加载。
import()加载模块成功以后, 这个模块会作为一个对象,当作then方法的参数。 因此,可以使用对象解构赋值的语法,获取输出接口。

import('./myModule.js')
.then(({export1, export2}) => {
      // ...·
});

如果模块有default输出接口,可以用参数直接获得

转载于:https://www.cnblogs.com/changlon/p/7884116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值