es6 Generator生成器函數


 生成器函數使用function*聲明。

 在生成器函數內部,有一種類似return的語法:關鍵字yield。二者的區別是,普通函數只可以return一次,而生成器函數可以yield多次(當然也可以只yield一次)。在生成器的執行過程中,遇到yield表達式立即暫停,后續可恢復執行狀態。

1、next方法的參數

yield語句本身沒有返回值,或者說總是返回undefined。

function* foo(x){
  var y=2*(yield(x+1));
  var z=yield(y/3);
  return (x+y+z);
}

var a=foo(5);
console.log(a.next());
console.log(a.next());
console.log(a.next());

不懂為什么后兩個next()返回值里的value的值都是NaN。

因為:雖然yield后面的表達式有值,yield可以像return一樣返回緊跟在yield語句后面的表達式的值。但是yield語句本身沒有返回值,或者說總是返回undefined。

next()方法可以帶一個參數,該參數會被當作上一條yield語句的返回值。

第一次使用next()方法時不能帶有參數。

function* foo(x){
  var y=2*(yield(x+1));
  var z=yield(y/3);
  return (x+y+z);
}

var a=foo(5);
console.log(a.next());
console.log(a.next(12));
console.log(a.next(13));

  • 第一次調用next() 返回x+1的值6
  • 第二次調用next(),將上一次yield語句的值置為12,因此y=24;返回y/3的值8
  • 第三次調用next(),將上一次yield語句的值置為13,因此z=13,此時x值為5,y值為24,返回x+y+z的值為42

 

 

本文作者starof,因知識本身在變化,作者也在不斷學習成長,文章內容也不定時更新,為避免誤導讀者,方便追根溯源,請諸位轉載注明出處:http://www.cnblogs.com/starof/p/6962607.html有問題歡迎與我討論,共同進步。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM