我有一段代碼:瞭解
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。該評論說
下一個的第一次調用()從功能 開始執行,直到第一個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
聲明。所以這個理論不能解釋我的問題。任何人都可以幫助我指出正確的方向嗎?提前致謝。
收益運算符必須優先。 –
這很有趣。運行'console.log(gen.next());'首先給出預期的輸出 –