私はコードを持っています:
function * input(){
let array = [];
while(true) {
array.push(yield array);
}
}
var gen = input();
console.log(gen.next("A"))
console.log(gen.next("B"))
console.log(gen.next("C"))
console.log(gen.next("D"))
実行すると、次の出力が得られます。
{ value: [], done: false }
{ value: [ 'B' ], done: false }
{ value: [ 'B', 'C' ], done: false }
{ value: [ 'B', 'C', 'D' ], done: false }
A
結果の最初の行が配列に含まれないのはなぜですか? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*#Passing_arguments_into_Generatorsのこのページからの説明が 1 つあります。コメントは言う
next() の最初の呼び出しは、関数の開始から最初の yield ステートメントまで実行されます
しかし、私のテストから、それは正しくないようです。私のテストコードは次のとおりです。
function* logGenerator() {
console.log("before yield in function");
yield 1;
console.log("filler 1");
yield 2;
console.log("filler 2");
yield 3;
console.log("filler 3");
}
var gen = logGenerator();
console.log(gen.next());
console.log("-----------------");
console.log(gen.next());
console.log("-----------------");
console.log(gen.next());
console.log("-----------------");
console.log(gen.next());
結果は次のとおりです。
before yield in function
{ value: 1, done: false }
-----------------
filler 1
{ value: 2, done: false }
-----------------
filler 2
{ value: 3, done: false }
-----------------
filler 3
{ value: undefined, done: true }
ご覧のとおり、最初next()
の は最初の の前のステートメントを実行しただけyield
でなく、最初のyield
ステートメントも実行しました。その理論では私の質問を説明できません。誰でも私を正しい方向に向けるのを助けることができますか? 前もって感謝します。