<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,假;然后未定义,真实; 而
<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结构(作为内部函数),我怎样才能继续获得与第一个样本相同的结果?
答案 0 :(得分:1)
d2
生成器函数不会产生任何内容,也不会返回任何内容,因此您只能获得未定义。
您可能希望将其称为传递p
参数,并使用yield*
生成每个迭代值。
function * d2 (p) {
yield* function * d1 (p) {
p -= 1;
yield p;
p -= 2;
yield p;
}(p);
}
答案 1 :(得分:0)
复制和过去的需求:这是Oriol为我工作的解决方案
<script>
function * d2 (p) {
function * d1 (p) {
p -=1 ;
yield p;
p -=2 ;
yield p; }
yield * d1(p); }
// ^^^^^^^^ are the changes
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>