js中yield
2018-12-28 本文已影响0人
谁在烽烟彼岸
在ES6中新增关键字yield,官方介绍如下
The yield keyword is used to pause and resume a generator function.
// yield这个关键字是用来暂停和恢复一个遍历器函数(的运行)的。
yield是命令型关键字
[rv] = yield [*][expression];
生成器(Generator)
生成器是ES6引入的新的函数形式, 可以在执行当中暂停自身,可以恢复执行,并不像普通函数那样保证运行到完毕。
function *foo(){..}
生成器并不会立即执行,需要调用它的next(..)方法才会执行,调用return()方法则会终止生成器的运行
yield在生成器中的应用
1.普通用法
yield用来标示暂停点,也可放在循环中,用来表示一个重复暂停点。
且在暂停时,会生成一个值,在调用nex(..)时,yield也会接收next传入的参数
2.yield*
*使得yield成为了yield * ,称之为yield委托(yield delegation)。yield * .. 需要一个iterable;然后它会调用这个迭代器,把自己的生成器控制权委托给这个迭代器,直到其耗尽。
function *gen(){
yield 1;
yield 2;
yield 3;
}
function *gen(){
yield *[1,2,3];
}
function *bar(){
yield *gen();
}
以上效果是相同的