生成函數(shù)(generator function)是一種新型函數(shù),是一個分段執(zhí)行函數(shù)白对。它的語法與函數(shù)語法基本一致层释,但以下一些不同點:
- function關鍵字被替換成了 function*
- 返回返回值是一個生成器(generator)
- 通過 yield 關鍵字來分段
例如下面是一個生成函數(shù):
function* sayHi() // 使用function*來定義生成函數(shù)
{
console.log("Hello") // 代碼段1
yield // 使用yield來分段
console.log("World") // 代碼段2
}
生成器
首先來理解一下生成器(generator)昔脯。生成品遵循iterator協(xié)議捌浩,有next方法放刨。
普通的迭代器用于遍歷對象(或容器),而生成器用于遍歷生成函數(shù)的代碼段尸饺。每調用一次next进统,則下一個代碼段將被調用。
接著上例侵佃,我們來看一下生成器的使用:
var generator = sayHi() // 調用生成函數(shù)返回生成器
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?