簡體   English   中英

ES6發生器算術運算中的產量

[英]ES6 Generator Yield inside arithmetic operation

當我定義了這種生成器時

function *process() {
  let value = 4 * (yield 42)
  console.log(value)
}

然后運行它:

let it = process()

it變量獲取處於暫停狀態的迭代器。 然后我打電話

it.next()

運行發電機的主體直到yield聲明。 然后我再次調用.next()以恢復生成器功能,將10作為參數傳遞給它

it.next(10)

這是迭代器中的最后一個yield ,據我所知,第二個.next()調用使用1010代替yield ,結果為4 * (10 42) ,計算得出的結果是控制台產量Uncaught SyntaxError: Unexpected number ,但是運行代碼時

 function *process() {
      let value = 4 * (yield 42)
      console.log(value)
    }
let it = process()
it.next()
it.next(10)

結果為40

從第二個.next(10)調用之后的那一刻起,該如何解釋? 為什么要記錄40

在此處輸入圖片說明

EURECA! yield 42表示在第一個.next()調用中,我們將收到{value: 42, done: false}作為結果(如問題末尾的圖像所示),因此基本上,它用作return語句,以及何時我們第二次調用.next(10) ,代碼中不再有yield 42 ,但是我們用10代替了所有yield 42

我相信描述這的文檔中的一章是this ,即算法的第10步:

使用NormalCompletion(value)作為掛起genContext的操作的結果,恢復genContext掛起的評估。 令result為恢復的計算返回的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM