在閱讀本篇之前壮虫,你需要先了解生成器(Generator)的基礎(chǔ)知識(shí),如果還沒(méi)有,請(qǐng)閱讀JavaScript:生成器(Generator)饱岸。
先看如下代碼:
function* valueOfYield() {
let value_of_yield = yield 1;
console.log("value of yield: ", value_of_yield);
}
let it = valueOfYield();
it.next(); // {value: 1, done: false}
// 至此还棱,yield 1被運(yùn)行载慈,但let value_of_yield = 還沒(méi)有被 運(yùn)行
it.next(); // {value: undefined, done: true}
// 至此,函數(shù)valueOfYield中的代碼全部被運(yùn)行珍手,console.log輸出value of yield: undefined
我們可以看到办铡,表達(dá)式yield 1
的返回值為undefined
辞做。這里要注意的一點(diǎn)是,yield
表達(dá)式的返回值與next
函數(shù)的返回值不同寡具,next
函數(shù)的返回值與yield
之后的值有關(guān)秤茅,而yield
表達(dá)式的值卻與此無(wú)關(guān)。例如yield 1
的返回值為undefined
童叠,而對(duì)應(yīng)的next
函數(shù)的返回值為1
框喳。
我們可以從外部改變yield
表達(dá)式的返回值。請(qǐng)看如下代碼:
function* valueOfYield() {
let value_of_yield = yield 1;
console.log("value of yield: ", value_of_yield);
}
let it = valueOfYield();
it.next(); // {value: 1, done: false}
// 至此厦坛,yield 1被運(yùn)行五垮,但let value_of_yield = 還沒(méi)有被 運(yùn)行
it.next("hello world"); // {value: undefined, done: true}
// 至此,函數(shù)valueOfYield中的代碼全部被運(yùn)行杜秸,console.log輸出value of yield: hello world
next
函數(shù)的參數(shù)即為上一個(gè)yield
表達(dá)式的返回值放仗。
更多關(guān)于生成器(Generator)的探討請(qǐng)參見(jiàn):