javascript - 如何在 javascript 中使用嵌套函数作为生成器(使用 "inner"产量)

标签 javascript generator inner-classes yield-keyword

<script>
function * d1 (p)  {
    p-=1;
    yield p;
    p-=2;
    yield p;
}

var g=d1 (9);
var h;
console.log((h=g.next()).value+','+h.done+';');
console.log((h=g.next()).value+','+h.done+';');
console.log((h=g.next()).value+','+h.done+';');
</script>

给出 8,假;那么6,假;那么未定义,true; 而

<script>
function * d2 (p)     {
    function * d1 (p)     {
        p -=1 ;
        yield p;
        p -=2 ;
        yield p;
    }
    d1(p);
}
var g=d2 (9);
var h;
console.log((h=g.next()).value+','+h.done+';');
console.log((h=g.next()).value+','+h.done+';');
console.log((h=g.next()).value+','+h.done+';');
</script>

给了我三次 undefined,true;

由于我想要 d1 的隐藏结构(作为内部函数),我怎样才能继续获得与第一个样本相同的结果?

最佳答案

d2 生成器函数不会产生也不返回任何内容,因此您只会得到未定义的结果。

您可能希望通过传递 p 参数来调用它,并使用 yield* 生成每个迭代值。

function * d2 (p) {
  yield* function * d1 (p) {
    p -= 1;
    yield p;
    p -= 2;
    yield p;
  }(p);
}

关于javascript - 如何在 javascript 中使用嵌套函数作为生成器(使用 "inner"产量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37213456/

相关文章:

javascript - 如何使用 JavaScript 触发单选按钮鼠标单击

python - Python 的生成器和迭代器的区别

node.js - forEach 在 Node.js 中使用生成器

python - 从 cmd 导入 Cmd,(不适用于 MyPrompt 类)

java - 为什么内部类的子类需要封闭实例?

javascript - vue-select 允许多个重复项

javascript - 切断 Javascript 字符串

java - 静态嵌套 Cass 在外部类中保存多个列表

javascript - 如何使用 JavaScript/jQuery 更改第二个背景图像 url

python - 运行 python 生成器清理代码的最佳方式