[笔记]关于ES6中import和export20210331

说明

以下内容是本人在学习过程中的一些笔记,可能会有错误。如有错误,欢迎指正。

概述

ES6之后实现了模块功能,ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。ES6模块本身不是对象,所以在引用的过程中是不能够引用自身的。这和CommonJS是不同的。

ES6模块的使用

export和import的使用

export命令用于规定模块的对外接口。
使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。
一个模块就是一个独立的文件,在外部是访问不到内部变量的。那么我们可以通过export将某个变量导出。

导出变量

// profile.js
export const a = 10;
export const b = 20;

const a = 10;
const b = 20;
// 可以一次导出多个变量 推荐这种写法,这样写可以一眼就看出导出了哪些变量
export { a, b };

导入变量

// main.js
import { a, b } from './profile.js';
// main.js
import { a, b } from './profile.js';

导出函数或类

 // profile.js
 // 导出函数
export function a() {
   console.log('我是函数a')
}

// profile.js
// 导出函数
function a() {
  console.log('我是函数a')
}
function b() {
  console.log('我是函数b')
}
// 导出时可以起别名 不过我个人感觉没什么必要 定义时取什么名那么导出时也导出什么名字 这样不容易乱
// export { a as aFn, b as bFn}
export { a, b };
// profile.js
// 导出类
export class A {
  constructor(name) {
  	this.name = name
  }
}

导入函数或类

 // main.js
 // 可以给导入的函数起个别名 那么我们在使用的时候就用这个别名即可
 // import { a as aFn} from './profile.js'
import { a, A } from './profile.js';
// aFn();
a(); // 我是函数a
const obja = new A('obja');
console.log(obja.name);	// obja

整体导入

 // main.js
import * as profile from './profile.js';
profile.a(); // 我是函数a
const obja = new profile.A('obja');
console.log(obja.name);	// obja

export default命令

在每个模块中只能写一个export default命令,它的作用是导出的时候导出当前模块的默认值。由于每个模块只能使用一次export default命令。所以说我们不需要在导入导出的时候以接口的形式导出。即不需要加上{}

例如:

// profile_default.js
export default function() {
	console.log('导出的默认函数,这里函数若为非匿名函数其作用与匿名函数是一样的,导入的时候这个非匿名函数的函数名是无效的')
}

// 或者可以写成
// function foo() {
// 	console.log('我是foo函数')
// }
// export default foo;
// main.js
// 注意不要写成 import { foo } from './profile_default.js';
// 这里面的foo是可以随便取名字的
import foo from './profile_default.js';

export default相当于导出default这个变量或方法,所以我们在导出的时候不能又以变量声明的形式导出。

export default var x = 10;	// 不允许
export default 10 	// 允许 本质上是把10赋予给default并导出

复合写法

export { a, b } from './myModule.js';

// 上述写法相当于
import { a, b } from './myModule.js';
export { a, b };

import()

上面说到的import { xxx } from './xxx.js’都是静态加载的。也就是会在加载文件在模块的顶层立马加载。
而import()是动态加载模块,只有执行到了这一行,那么才进行加。import()返回的是一个Promise对象
适用于
1.按需加载
2.条件加载
3.动态的模块路径

最后一些注意点

1.ES6模块中将自动采用严格模式
2.ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this。
3.import引入的变量都是只读的 修改的话会报错。
4.由于import是静态执行,所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值