ES6模块化&ES8 async和await

文章介绍了ES6的模块化机制,包括export和import命令,以及CommonJS、AMD规范。此外,还讨论了如何通过Babel将ES6语法转译为浏览器兼容的ES5。最后,文章提到了async和await的使用,它们让异步代码更易读写,返回Promise对象并处理异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6模块化

将一个人大的程序文件拆分成许多小的文件,然后将小文件组合起来

好处

  1. 防止命名冲突
  2. 代码复用
  3. 高维护性

规范产品

  1. CommonJS => NodeJS、Browserify
  2. AMD => requireJS
  3. CMD => seaJS

语法

模块功能主要由两个命令构成:export和import

  • export命令用于规定模块的对外接口
  • import命令用于输入其他模块提供的功能

暴露数据方式:
分别暴露

export let name = "Tome"
export function learn () {
	console.log("xixi");
}

统一暴露

let name = "Tome"
function learn () {
	console.log("xixi");
}
export {name,learn}

默认暴露

export default {
	//里面写要暴露的数据
	name:"Tome"
	learn: function () {
		console.log("xixi");
	}
}

引入数据:
通用引入:

<script type = "module">
	//引入模块内容
	import * as m1 from "./src/js/m1.js";
</script>

解构赋值形式

import {name, learn} from "./src/js/m1.js"
import {name as n} from "./src/js/m2.js"
import {default as m} from "./src/js/m3.js"

简便形式:只能针对默认暴露

import m3 from "./src/js/m3.js"

入口文件

一直在script标签中去引入模块,会导致代码体积很大。我们可以把引入放入单独的文件中。创建app.js作为js代码的入口。
app.js:

import m3 from "./src/js/m3.js"

在使用的时候,引入app.js即可

<script src="./src/js/app.js" type = "module"></script>

Babel

实际项目中考虑兼容性的问题不会用上述方法引入,而是使用另外一种方式——Babel。
Babel可以将比较新的es语法转化为浏览器容易识别的es5语法。

  1. 安装工具,使用npm安装
    babel-cli babel的命令行工具
    babel-preset-env 预设包
    browserify(或者webpack) 打包工具
npm i babel-cli babel-preset-env browserify -D
  1. 转换
npx babel src/js -d dist/js --presets=babel-preset-env
  1. 打包
npx browserify dist/js/app.s -o dist/bundle.js

ES8 async和await

async和await结合可以让异步代码像同步代码一样。

async

  1. 返回值为promise对象
  2. promise对象的结果由async函数执行的返回值决定
async function fn() {
	//返回的结果只要不是一个promise对象,返回的结果就是一个成功Promise对象
	//抛出错误,返回结果是一个失败的Promise
	//返回结果如果是一个Promise对象(这种情况居多)
	return new Promise((resolve,reject) => {
		resolve('成功的数据');
		//reject('失败的错误');//内部失败外部也失败
	});
	//调用resolve之后,内部的promise就是一个成功的promise,
	//那么外部的promise返回的结果也是成功的,并且返回值就是内部的返回值
}
	const result = fn();
	result.then(value => {
		console.log(value);
	},reason => {
		console.log(reason);
	})

await

  1. await必须写在async函数中
  2. await右侧的表达式一般为promise对象
  3. await返回的是promise成功的值
  4. await的promise失败了,就会抛出异常,需要通过try catch捕获处理
ESECMAScript)是一组定义JavaScript语法API的规范。从第六版(ES6)开始,每个新版本都引入了许多重要的语言特性改进。以下是部分关键的新特性: **ES6 (ECMAScript 2015)** 1. **let const**:引入了块级作用域变量,以及常量`const`,避免了变量提升的问题。 2. **箭头函数**:更简洁的语法,没有`this`绑定的困扰,适用于回调数组操作。 3. **模板字面量 (`template literals`)**:使用反引号(````)包围的字符串可以包含表达式,方便插入变量。 4. **解构赋值**:简化数据结构的处理,如数组对象的元素提取。 5. **Promise**:处理异步编程,解决了回调地狱问题。 **ES7 (ECMAScript 2016)** 1. **async/await**:引入了异步函数,使得处理Promise更加直观易读。 2. **剩余参数默认参数**:增强了函数参数的灵活性。 3. **扩展运算符 (`...`)**:用于数组函数参数的展开。 4. **类(class)**:提供了一种更为传统的方式来声明对象,支持继承构造函数。 **ES8 (ECMAScript 2017)** 1. **静态类(Class Statics)**:引入静态方法属性。 2. **Object.values() Object.entries()**:获取对象的所有键值对键名。 3. **Set Map**:新的数据结构,用于去重关联数据。 **ES9 (ECMAScript 2018, 也称为ES2018)** 1. **async/await for循环**:用于遍历Promise集合。 2. **BigInt**:支持大整数类型。 3. **String.prototype.matchAll()**:查找所有匹配项,类似正则表达式的全局搜索。 **ES10 (ECMAScript 2019)** 1. **私有字段(Private Fields)方法(Private Methods)**:提供了访问控制,限制对外部的可见度。 2. **Optional Chaining(空合并运算符)**: `?.`,优雅处理可能出现null或undefined的情况。 3. **`Array.from()` 等更多扩展**:新增了一些数组转换方法。 **后续版本:ES11, ES12, ES13等** - 更多模块化改进、TypeScript集成、迭代器协议增强等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值