生成函数(generator function)是一种新型函数,是一个分段执行函数。它的语法与函数语法基本一致,但以下一些不同点:
- function关键字被替换成了 function*
- 返回返回值是一个生成器(generator)
- 通过 yield 关键字来分段
例如下面是一个生成函数:
function* sayHi() // 使用function*来定义生成函数
{
console.log("Hello") // 代码段1
yield // 使用yield来分段
console.log("World") // 代码段2
}
生成器
首先来理解一下生成器(generator)。生成品遵循iterator协议,有next方法。
普通的迭代器用于遍历对象(或容器),而生成器用于遍历生成函数的代码段。每调用一次next,则下一个代码段将被调用。
接着上例,我们来看一下生成器的使用:
var generator = sayHi() // 调用生成函数返回生成器
generator.next() // 运行代码段1
generator.next() // 运行代码段2
第一次调用next()时,代码段1运行,第二次调用next()时,代码段2运行。
yield 返回值
上述代码中,仅仅通过yield来将代码分段,实际上yield也可以传递value给生成器。
通过一个例子来了解一下:
function* idMaker() {
yield 1 // 1将作为next的value
yield 2 // 2将作为next的value
yield 3 // 3将作为next的value
}
var generator = idMaker()
console.log(generator.next().value) // 输出 1
console.log(generator.next().value) // 输出 2
console.log(generator.next().value) // 输出 3
好了,完结。
什么是WeakMap?