使用 JavaScript 生成器函數(shù)生成范圍
它允許你定義一個包含自有迭代算法的函數(shù),同時它可以自動維護自己的狀態(tài)。它們使用 function*
(function
關鍵字后跟一個星號)進行定義,并使用
generateRange
,該函數(shù)將返回 start
和 end
之間的每個值,每次按 step
遞增。我們使用 調用 Generator.prototype.next()
,直到它返回 {value: undefined, done: true}
來遍歷生成器產生的值。
Symbol.iterator
指定對象的默認迭代器。通常情況下,
在此示例中,可以看到對象通過將生成器函數(shù)分配給其 屬性而變得可迭代。如果您想迭代一些任意數(shù)據或創(chuàng)建一個使用生成器函數(shù)的可迭代對象,這會特別方便。
整合
了解這兩個概念的工作原理后,我們可以將它們結合起來,創(chuàng)建一個類似于 Python 或 Ruby 的范圍生成器:
range
函數(shù)接收 end
、start
和 step
參數(shù),用于定義生成范圍。generateRange
生成器函數(shù)通過 yield
關鍵字逐步生成值,直到其滿足循環(huán)條件。然后,我們將此生成器函數(shù)賦給 Symbol.iterator
屬性,從而使返回的對象具有可迭代性。最后,我們可以使用擴展運算符(...
)或 for...of
標簽: