该
next方法定义如下:
25.3.1.2 Generator.prototype.next(value)
该
next方法执行以下步骤:
- 让 摹 是 这个 值。
- 返回GeneratorResume( g , value )。
GeneratorResume抽象操作在步骤10 使用 值 :
25.3.3.3 GeneratorResume(生成器,值)
具有参数generator和value的抽象操作GeneratorResume执行以下步骤:
假设 genContext 为 生成器 的[[GeneratorContext]] 内部插槽的值。
使用NormalCompletion( value )恢复
genContext 的暂停评估,作为暂停该操作的结果 。令 result
为恢复的计算返回的值。 __
第一种可能性是通过使用
yield(即
"suspendedYield"状态)暂停了评估。
其行为在14.4.14运行时语义:评估中进行了说明:
Yieldexpression :
yield
- 返回GeneratorYield(CreateIterResultObject( undefined ,
false ))。
(类似于 Yieldexpression :
yieldAssignmentexpression )
该GeneratorYield抽象操作暂停发生器如下:
设置 genContext 的代码评估状态,以便当使用Completion
resumptionValue恢复 评估时,将执行以下步骤:
- 返回 resumptionValue 。
- 注意:这返回到最初称为此抽象操作的 Yieldexpression 生产的评估。
因此,作为第二个参数传递的值将用作
next第一个
yield表达式的返回值。作为第三个参数传递的值将用作
next第二个
yield表达式的返回值。等等。
但是,也有可能发电机尚未启动(即
"suspendedStart"状态)。
这是通过GeneratorStart抽象操作完成的:
- 设置 genContext 的代码评估状态,以便在对该执行上下文恢复评估时,将执行以下步骤:
但是那些“后续步骤”不使用恢复值。
因此,作为第一个参数传递的值将
next被丢弃。



