yield *next 与 yield next的区别是什么?
走同样的路,发现不同的人生
yield* 是委託提取器,詳情請看這裡:http://wiki.ecmascript.org/doku.php?id=harmony:generators#delegating_yield。簡單地說,yield 是你給什麼它提取什麼,但是 yield* 會繼續向下請求,直到沒的提取為止。
yield*
yield
舉個例子好了:
function* a() { yield 1; yield 2; yield 3; } function* b() { yield 4; yield* a(); yield 5; } function* c() { yield 6; yield* b(); yield 7; } for (let x of c()) console.log(x) // 你覺得會輸出什麼?先自己試試看
答案是:6, 4, 1, 2, 3, 5, 7,這個邏輯還算挺好理解吧?
6, 4, 1, 2, 3, 5, 7
其實可以簡單的理解為:yield next是讓generator回傳next,而yield *next裡的next本身就是一個generator,外層generator回傳這個next generator的回傳值
yield*
是委託提取器,詳情請看這裡:http://wiki.ecmascript.org/doku.php?id=harmony:generators#delegating_yield。簡單地說,yield
是你給什麼它提取什麼,但是yield*
會繼續向下請求,直到沒的提取為止。舉個例子好了:
答案是:
6, 4, 1, 2, 3, 5, 7
,這個邏輯還算挺好理解吧?其實可以簡單的理解為:yield next是讓generator回傳next,而yield *next裡的next本身就是一個generator,外層generator回傳這個next generator的回傳值