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();
}

以上效果是相同的

上一篇下一篇

猜你喜欢

热点阅读