javascript - 遍历 ES6 中的生成器

标签 javascript ecmascript-6 generator yield

这段代码

let func = function *(){
    for (let i = 1; i < 5; i++) {
        yield i;
    }
}
let s = func().next();
console.log(s);
let s2 = func().next();
console.log(s2);

返回

Object {value: 1, done: false}
Object {value: 1, done: false}

所以基本上 func 总是产生第一个值。

但是当我改成

let f = func();
let s = f.next();
console.log(s);
let s2 = f.next();
console.log(s2);

它按预期工作。 为什么将 func 分配给变量会产生如此大的差异?

最佳答案

在您的第一段代码中,您总是在创建一个新的生成器实例。我已将这些实例分配给单独的变量以更清楚地说明这一点:

// first generator instance
let g = func();
// first call to next on the first instance
let s = g.next();
console.log(s);
// second generator instance
let g2 = func();
// first call to next on the second instance
let s2 = g2.next();
console.log(s2);

而在您的第二个代码段中,您不断迭代相同的生成器(分配给变量 f):

let f = func();
// first call to next
let s = f.next();
console.log(s);
// second call to next
let s2 = f.next();
console.log(s2);

关于javascript - 遍历 ES6 中的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36895095/

相关文章:

python - "max_q_size"中使用的参数 "model.fit_generator"是什么?

python - 函数和生成器的区别?

javascript - 带有 .parent() 和动态选择器的 jQuery .on()

javascript - 使用 CSSStyleDeclaration.setProperty() 时如何告诉 Chrome 浏览器不要将电话号码转换为指数数?

javascript - Switch 中的 ES6 模式匹配

python - 什么时候使用 return(产生一些东西)?

javascript - 3 个请求函数的数组 - 只有当第一个函数的响应包含字符串时,如何调用第二个函数? - Node JS

javascript - 谷歌iframe在悬停时更改不透明度

javascript - 获取类中的所有静态 getter

javascript - 必须传递一个空对象作为参数 ES6