![](/img/trans.png)
[英]ES6 yield* - only yield one value at a time on referenced generator?
[英]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()
調用使用10
將10
代替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.