推荐答案
yield
关键字用于暂停和恢复生成器函数的执行。它允许生成器函数在每次调用 next()
方法时生成一个值,并在生成值后暂停执行,直到再次调用 next()
方法。yield
关键字还可以用于接收外部传入的值。
本题详细解读
1. 生成器函数
生成器函数是一种特殊的函数,使用 function*
语法定义。生成器函数在执行时不会立即运行,而是返回一个生成器对象。生成器对象遵循迭代器协议,可以通过 next()
方法逐步执行函数体。
-- -------------------- ---- ------- --------- ------------------- - ----- -- ----- -- ----- -- - ----- --------- - -------------------- ------------------------------------ -- --- - ------------------------------------ -- --- - ------------------------------------ -- --- -
2. yield
的作用
yield
关键字在生成器函数中有两个主要作用:
暂停执行:当生成器函数执行到
yield
语句时,函数会暂停执行,并返回yield
后面的值。此时,生成器函数的状态会被保存,直到下一次调用next()
方法。恢复执行:当调用生成器对象的
next()
方法时,生成器函数会从上次暂停的地方继续执行,直到遇到下一个yield
语句或函数结束。
3. yield
与 next()
的交互
yield
不仅可以返回值,还可以接收外部传入的值。当调用 next()
方法时,可以传递一个参数,这个参数会成为 yield
表达式的返回值。
-- -------------------- ---- ------- --------- ------------------- - ----- ------ - ----- ------ ------- -------------------- -- --- ------- -- ----- ----- ------ - ----- ------- ------- -------------------- -- --- -------- ------ - ----- --------- - -------------------- ------------------------------------ -- --- ------ ------ ---------------------------------- -- -------------- -- --- ------- ------ ----------------------------------- --------------- -- --- ---------
4. yield*
表达式
yield*
表达式用于委托给另一个生成器或可迭代对象。它可以简化生成器函数的编写,特别是在需要嵌套生成器时。
-- -------------------- ---- ------- --------- ------------ - ----- -- ----- -- - --------- ------------ - ------ ------------- ----- -- - ----- --------- - ------------- ------------------------------------ -- --- - ------------------------------------ -- --- - ------------------------------------ -- --- -
5. 总结
yield
关键字是生成器函数的核心,它使得生成器函数能够暂停和恢复执行,从而实现更灵活的控制流。通过 yield
,生成器函数可以逐步生成值,并且可以与外部代码进行双向通信。