【ES6】ES6的重要的13种新特性之生成器

生成器的主要功能:通过一段程序持续迭代或枚举出符合某个公式或算法的有序数列中的元素。

生成器同时包含语法和底层支持。

1.生成器函数

生成器函数的函数体内容将会是所生成的生成器的执行内容。

yield语句和return的作用有些相似,但不是退出函数体,而是切出当前函数的运行时,同时可以将一个值带到主线程中。

生成器函数可以看做一个类。

1
2
3
4
5
6
7
//声明式定义
function* fibo(){
//...
}
//表达式定义
const fnName = function*(){/*...*/}

2.生成器generator

生成器是一种类协程/半协程序。提供通过特定语句或方法(一般是yield语句)时其执行对象暂停的功能。

yield语句可以将一个值带出协程,主线程也可以通过生成器对象的方法(.next())将一个值带回到生成器的执行对象中去。

每一个生成器都是类(生成器函数)的派生实例。

3.使用方法

①构建生成器函数

②执行生成器函数

通过执行生成器函数返回一个生成器对象,用于运行生成器内容和接受其中的值。

生成器也是一个类,这个类有个操作方法generator.next(value)用于获取下一个生成器切出状态(第一次执行时为第一个切出状态)对象,包含了当前生成器的运行状态和返回的值。

生成器执行对象直到遇到最后一个yield语句或第一个return语句便终止。

③运行生成器内容

生成器对象自身也是一种可迭代对象,所以直接使用for-of循环。

6

4.生成器嵌套

一个生成器嵌套在另一个生成器中。

yield*语句:将一个生成器对象嵌套在另一个生成器中,并将其展开。

7

附代码地址:https://github.com/JoseyDon/ES6-demo