亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

學習generator函數中,yield的使用的疑惑

學習generator函數中,yield的使用的疑惑

LEATH 2018-08-26 16:27:05
function* gen(x){  var y = yield x + 2;  console.log(typeof y);  return y; }var g = gen(1); g.next() // { value: 3, done: false }g.next() // undefined { value: undefined, done: true }我想問的是為什么這里的y沒有得到值我的理解是第一步g.next()執行x + 2第二步 執行 y = x + 2 這里似乎是錯了如果我希望y 可以得到x+2的值應該怎么做呢?
查看完整描述

1 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

啥話都不說,看一下執行邏輯。

  1. 申明g變量

  2. 申明Generator函數gen

  3. g變量賦值gen(1)

    gen函數內部申明了變量y;
    然后函數被yield暫停
  4. g的next

    執行x+2,并返回繼續暫停
  5. g的next

    y賦值一個unlined。注意!!yield是函數的暫停標記,返回當前計算結果給調用者,不會傳值給當前上下文里的任何人!
    然后console typeof y
    然后return y,并終止了Generator 函數

    // ...

想達到效果應該這樣寫

function* gen(x){  var y;  yield y = x + 2;  console.log(typeof y);  return y;
}


查看完整回答
反對 回復 2018-10-27
  • 1 回答
  • 0 關注
  • 706 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號