add file:变量提升
This commit is contained in:
@@ -29,6 +29,16 @@ ES6中增加了很多功能上的不足。比如:**常量、作用域、对象
|
||||
|
||||
ES6 的目标是:让 JS 语言可以编写复杂的大型应用程序,成为企业级开发语言。
|
||||
|
||||
### ECMAScript 的各大版本
|
||||
|
||||
- ECMAScript 2015年6月:ES6
|
||||
|
||||
- ECMAScript 2016:ES7
|
||||
|
||||
- ECMAScript 2017:ES8
|
||||
|
||||
|
||||
|
||||
|
||||
### ES6 的其他优势
|
||||
|
||||
|
||||
@@ -19,23 +19,29 @@ Promise对象: 代表了未来某个将要发生的事件(通常是一个异步
|
||||
ES6中的promise对象, 可以**将异步操作以同步的流程表达出来,**很好地解决了**回调地狱**的问题(避免了层层嵌套的回调函数)。在使用ES5的时候,在多层嵌套回调时,写完的代码层次过多,很难进行维护和二次开发。
|
||||
|
||||
|
||||
### 回调地狱的举例
|
||||
|
||||
假设买菜、做饭、洗碗都是异步的。
|
||||
|
||||
现在的流程是:买菜成功之后,才能开始做饭。做饭成功后,才能开始洗碗。这里面就涉及到了回调的嵌套。
|
||||
|
||||
|
||||
ES6的Promise是一个构造函数, 用来生成promise实例。
|
||||
|
||||
|
||||
### promise对象的3个状态
|
||||
|
||||
- pending: 初始化状态
|
||||
- 初始化状态(等待状态):pending
|
||||
|
||||
- fullfilled: 成功状态
|
||||
- 成功状态:fullfilled
|
||||
|
||||
- rejected: 失败状态
|
||||
- 失败状态:rejected
|
||||
|
||||
### 使用promise的基本步骤
|
||||
|
||||
(1)创建promise对象
|
||||
|
||||
(2)调用promise的then()
|
||||
(2)调用promise的**回调函数**then()
|
||||
|
||||
|
||||
代码格式如下:
|
||||
@@ -76,11 +82,11 @@ ES6的Promise是一个构造函数, 用来生成promise实例。
|
||||
|
||||
- 如果请求失败了,请写reject(),此时,promise的状态会被自动修改为rejected
|
||||
|
||||
(2)promise.then()方法,括号里面有两个参数,分别代表function1和function2:
|
||||
(2)promise.then()方法,括号里面有两个参数,分别代表两个函数 function1 和 function2:
|
||||
|
||||
- 如果promise的状态为fullfilled,则执行function1里的内容
|
||||
- 如果promise的状态为fullfilled(意思是:如果请求成功),则执行function1里的内容
|
||||
|
||||
- 如果promise的状态为rejected,则执行function2里的内容
|
||||
- 如果promise的状态为rejected(意思是,如果请求失败),则执行function2里的内容
|
||||
|
||||
另外,resolve()和reject()这两个方法,是可以给promise.then()传递参数的。如下:
|
||||
|
||||
@@ -164,6 +170,14 @@ ES6的Promise是一个构造函数, 用来生成promise实例。
|
||||
|
||||
|
||||
|
||||
### 参考链接
|
||||
|
||||
- [当面试官问你Promise的时候,他究竟想听到什么?](https://zhuanlan.zhihu.com/p/29235579)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Symbol
|
||||
@@ -275,7 +289,6 @@ Symbol是函数,但并不是构造函数。创建一个Symbol数据类型:
|
||||
|
||||
|
||||
|
||||
|
||||
```javascript
|
||||
//在括号里加入参数,来标识不同的Symbol
|
||||
let mySymbol1 = Symbol('one');
|
||||
@@ -304,7 +317,6 @@ Symbol 可以用来定义常量:
|
||||
|
||||
|
||||
|
||||
|
||||
### 内置的 Symbol 值
|
||||
|
||||
除了定义自己使用的 Symbol 值以外,ES6 还提供了 11 个内置的 Symbol 值,指向语言内部使用的方法。
|
||||
@@ -315,9 +327,40 @@ Symbol 可以用来定义常量:
|
||||
|
||||
|
||||
|
||||
### async函数
|
||||
|
||||
|
||||
## async函数(异步函数)
|
||||
|
||||
### 概述
|
||||
|
||||
> async 函数是在 ES2017 引入的。
|
||||
|
||||
概念:真正意义上去解决异步回调的问题,同步流程表达异步操作。
|
||||
|
||||
本质: Generator 的语法糖。
|
||||
|
||||
async比之前的 Promise、Generator要好用一些。
|
||||
|
||||
|
||||
语法:
|
||||
|
||||
```javascript
|
||||
async function foo() {
|
||||
await 异步操作;
|
||||
await 异步操作;
|
||||
}
|
||||
```
|
||||
|
||||
我们在普通的函数前面加上 async 关键字,就成了 async 函数。
|
||||
|
||||
|
||||
### async、Promise、Generator的对比(async的特点)
|
||||
|
||||
1、不需要像Generator去调用next方法,遇到await等待,当前的异步操作完成就往下执行。
|
||||
|
||||
2、async返回的总是Promise对象,可以用then方法进行下一步操作。
|
||||
|
||||
3、async取代Generator函数的星号*,await取代Generator的yield。
|
||||
|
||||
4、语意上更为明确,使用简单,经临床验证,暂时没有任何副作用。
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user