2017-08-07 95 views
1

這裏是我的示例代碼:ES6生成器:爲什麼傳遞給第一個next()函數的參數不起作用?

function *g() { 
    while (true) { 
    console.log(yield) 
    } 
} 

var gen = g(); 
gen.next(3); // {value: undefined, done:false} 
gen.next(3); // 3 {value: undefined, done:false} 
gen.next(3); // 3 {value: undefined, done:false} 

爲什麼第一個參數傳遞給第一next()功能不起作用?爲什麼value屬性的值是undefined,它不應該是傳入的參數值嗎?

+2

你生產什麼,那麼爲什麼你希望得到的說法回來? – Bergi

回答

2

這是發生器中發生的情況。

第一次調用初始化生成器(並返回一個迭代器),不運行任何內部代碼。

從那時起,到.next(value)每個呼叫上迭代經過value從當前暫停yield被返回並繼續執行到下一yield(或功能的結束時),返回yield -ed(或返回)值。

現在,第一個.next調用中當前暫停的yield是什麼?沒有一個,我們從函數的頂部開始執行。

因此,無論您傳入第一個next調用(它被忽略),第一個值是undefined

至於yield -ed值爲undefined,則會得到您yield

function *g() { 
 
    yield;  // yields undefined 
 
    yield 3; 
 
    yield 'a'; 
 
} 
 

 
for (const v of g()) { 
 
    console.log(v); 
 
}

+1

TIL'for(const v of g())',我沒意識到你可以這樣做!事後看來,這是相當重要的。 – msanford

相關問題