iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
自我挑戰組

認識JavaScript系列 第 13

[第十三天] Generator

  • 分享至 

  • xImage
  •  

定義
用來重複回饋的序列。但是可以暫停,而且還能從暫停的地方繼續下去。

就像是一種迴圈,但是這種迴圈不是有條件(或次數)的,是要把每個對象走過。

用法
注意兩件事情:

  • 使用function*定義
  • 使用yield暫停
function* myGenerator() {
    yield 1;
    yield 2;
    yield 3;
}

const c = myGenerator();
console.log(c.next());
console.log(c.next());
console.log(c.next());
console.log(c.next());

首先,用function*定義,並且使用yield暫停。
叫用時使用next(),就會執行到下一個yield
然後回傳一組物件:(value, done)。
done比較特別,就是告訴你,這個 myGenerator 走完沒。
所以印出:
{ value: 1, done: false }
{ value: 2, done: false }
{ value: 3, done: false }
{ value: undefined, done: true }

在這裡,我的疑問是:執行到yield 3時,後面也沒有值了,為什麼done還是false?
那是因為 yield 只是負責「暫停」,不是負責結束。
所以要到下一個 next(),因為沒有多的 yield,才算結束。

如果需要結束,也可以使用return()喔~


上一篇
[第十二天] map
下一篇
[第十四天] Garbage Collection
系列文
認識JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言