推荐答案
Generator 函数是 ES6 引入的一种特殊函数,它可以通过 function*
语法定义,并且可以使用 yield
关键字来暂停和恢复函数的执行。Generator 函数返回一个 Generator 对象,该对象遵循迭代器协议,可以通过 next()
方法逐步执行函数体中的代码。
本题详细解读
1. Generator 函数的定义
Generator 函数使用 function*
语法定义,函数体内可以使用 yield
关键字来暂停函数的执行,并返回一个值。每次调用 next()
方法时,函数会从上次暂停的地方继续执行,直到遇到下一个 yield
或函数结束。
-- -------------------- ---- ------- --------- ------------- - ----- -- ----- -- ----- -- - ----- --- - -------------- ------------------------------ -- -- - ------------------------------ -- -- - ------------------------------ -- -- -
2. Generator 函数的执行过程
Generator 函数不会立即执行,而是返回一个 Generator 对象。调用 next()
方法时,函数会从上次暂停的地方继续执行,直到遇到 yield
或 return
语句。yield
会暂停函数执行并返回一个值,而 return
会结束函数执行并返回一个值。
-- -------------------- ---- ------- --------- ------------- - ----- -------- ----- --------- ------ ------ - ----- --- - -------------- ------------------------------ -- -- ------- ------------------------------ -- -- -------- ------------------------------ -- -- ----- ----------------------------- -- -- ----
3. Generator 函数的应用场景
Generator 函数常用于异步编程、惰性求值、无限序列等场景。通过 yield
和 next()
的配合,可以实现复杂的控制流。
-- -------------------- ---- ------- --------- ------------------ - --- - - -- ----- ------ - ----- ---- - - ----- --- - ------------------- ------------------------------ -- -- - ------------------------------ -- -- - ------------------------------ -- -- - -- ------ ------ --
4. Generator 函数与迭代器的关系
Generator 函数返回的 Generator 对象实现了迭代器协议,因此可以使用 for...of
循环来遍历 Generator 函数生成的值。
-- -------------------- ---- ------- --------- ------------- - ----- -- ----- -- ----- -- - --- ------ ----- -- -------------- - ------------------- -- ---- -- -- - -
5. Generator 函数的错误处理
Generator 函数可以通过 throw()
方法在函数体内抛出错误,并通过 try...catch
捕获错误。
-- -------------------- ---- ------- --------- ------------- - --- - ----- -- ----- -- ----- -- - ----- --- - ------------------ --------- --- - - ----- --- - -------------- ------------------------------ -- -- - ------------- ---------------- ---- --------- -- -- ------ ------- ------ --------- ---- ------