《上古卷軸5》高清材質包 堡壘貼圖升級至4K/8K
阿新 • • 發佈:2021-10-12
1.next()永遠都會比yield多一個
2.訊息傳遞
-
當next(..)執行到yield語句處時會暫停生成器的執行,同時next(...)會得到一個帶有value屬性的物件,yield語句後面帶的值會賦給value(如果yield後面沒有值,value就為undefined)。可以將yield ...效果看成跟return ...類似。
-
當生成器處於暫停狀態時,暫停的yield表示式處可以接收下一個啟動它的next(...)傳進來的值。當next(...)使生成器繼續往下執行時,其傳入的值會將原來的yield語句替換掉。
- 第一個next()僅僅是用於啟動生成器用的,並不會傳入任何東西,如果傳入了引數也會被自動忽略掉。
- yield ...在值傳遞方面的作用相當於return ...,你也可以把它當做一個return語句來看待,如果yield後面不加引數,則預設yield undefined;
- 最後一個next()執行完畢之後,得到的值是*main()函式return出來的值,如果函式沒有自己加return語句,一樣也會預設return undefined;
- next()執行完畢後會返回一個物件,屬性值有兩個,分別為value(從yield或return處拿到的值)和done(boolean值,標識生成器是否執行完畢)。
function *main() {
let x1;
let x = yield "starting";
let y = yield (x * 2);
console.log(x, y);
}
let it = main();
let res = it.next('1111'); // '1111'被丟棄啦~~
console.log(res.value); // 輸出"starting"
res = it.next(); // 不給yield傳值 x成了undefined
console.log(res.value); // 輸出NaN (undefined * 2得到了NaN傳給next()執行後的物件)
res = it.next(2); // 不給yield傳值 y未拿到值
// 輸出undefined 2
console.log(res.value); // 輸出undefined (預設return undefined;)