ich ein Stück Code haben:Verständnis von Javascript des Generators
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"))
Wenn Sie es ausführen Sie erhalten die folgende Ausgabe:
{ value: [], done: false }
{ value: [ 'B' ], done: false }
{ value: [ 'B', 'C' ], done: false }
{ value: [ 'B', 'C', 'D' ], done: false }
Warum die erste Zeile des Ergebnisses nicht enthält A
im Array? Es gibt eine Erklärung auf dieser Seite unter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*#Passing_arguments_into_Generators. Der Kommentar sagt
der erste Aufruf von next() vom Start der Funktion , bis die ersten yield-Anweisung ausführt
Aber aus meiner Prüfung scheint es nicht richtig. Mein Testcode lautet:
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());
Das Ergebnis ist:
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 }
Wie Sie sehen können, die erste next()
nicht nur die Anweisungen vor dem ersten yield
ausgeführt, sondern auch die erste yield
Aussage. Also diese Theorie kann meine Frage nicht erklären. Kann mir jemand helfen, mir die richtige Richtung zu zeigen? Danke im Voraus.
Der Yield-Operator muss Vorrang haben. –
Das ist interessant. running 'console.log (gen.next());' gibt zuerst die erwartete Ausgabe –