JavaScript 中可正常导出生成器函数和迭代器函数:命名导出用 export function,默认导出可用 return 迭代器对象或 export default function,亦支持 export const generator = function*(){} 及批量导出。

在 JavaScript 中,可以用 export 正常导出生成器函数(generator function)和普通迭代器函数,语法与其他函数一致,只需注意函数声明/表达式前加上 export 关键字即可。
导出命名的生成器函数
生成器函数用 function* 声明,支持命名导出:
export function* countUp(from = 0) {<br> let i = from;<br> while (true) {<br> yield i++;<br> }<br>}使用时可按名称导入:
import { countUp } from './utils.js';<br>const gen = countUp(10);<br>console.log(gen.next().value); // 10导出默认的迭代器函数(返回迭代器对象)
若函数本身不带 *,但返回一个符合迭代器协议的对象(含 next() 方法),也可导出为默认导出:
export default function createRangeIterator(start, end) {<br> let current = start;<br> return {<br> next() {<br> return current ? { value: current++, done: false }<br> : { value: undefined, done: true };<br> }<br> };<br>}导入后直接调用获取迭代器:
import rangeIterator from './iterators.js';<br>const it = rangeIterator(1, 4);<br>console.log(it.next()); // { value: 1, done: false }导出箭头函数形式的生成器?不支持
ES 标准中不存在“箭头生成器函数”。箭头函数不能用 function* 语法,也不能使用 yield。所以以下写法是错误的:
// ❌ 语法错误<br>export const myGen = *() => { yield 1; };如需导出生成器逻辑,必须用 function* 声明(命名或匿名),例如:
export const generateIds = function*(prefix = 'id') {<br> let i = 0;<br> while (true) yield `${prefix}-${i++}`;<br>};导出多个生成器或迭代器的常见方式
可以统一放在一个模块中批量导出:
// generators.js<br>export function* fibonacci() {<br> let [a, b] = [0, 1];<br> while (true) {<br> yield a;<br> [a, b] = [b, a + b];<br> }<br>}<br><br>export function* powersOfTwo() {<br> let n = 1;<br> while (true) {<br> yield n;<br> n *= 2;<br> }<br>}<br><br>export default function* infiniteCounter() {<br> let i = 0;<br> while (true) yield i++;<br>}对应导入方式灵活:
import { fibonacci, powersOfTwo } from './generators.js';<br>import counter from './generators.js';











