【发布时间】:2018-12-28 22:03:21
【问题描述】:
我正在尝试更好地了解生成器在 javascript 中的工作方式。
来自 MDN:
function* 声明(function 关键字后跟一个星号) 定义了一个生成器函数,它返回一个 Generator 对象。
function *range(from, to) {
var counter = from;
while(to >= counter) {
yield counter
counter++
}
}
for (var r of range(5, 10)) {
console.log( r );
}
// print: 5, 6, 7, 8, 9, 10
我不确定我是如何理解上面的 sn-p 中发生了什么。
生成器不应该被调用,存储为(生成器)对象,然后由next() 方法调用。 (如下所示)
function *foo () {
yield 'woo';
}
var G = foo();
console.log( G.next() );
在上面的代码中,在第 4 行,var G = foo(); 我不是调用函数并创建新的执行上下文,这应该只返回一个生成器对象(并将其存储在标签 @987654325 下@)。
当我在第 5 行调用 next() 方法时,我将调用实际函数 foo。此时,我正在创建一个执行上下文,执行 foo 中的代码并产生取出字符串"woo"。
第一个 sn-p 究竟应该如何工作?
【问题讨论】:
标签: javascript for-loop generator