es6 Generator生成器函數

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

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

一、next方法的參數學習

yield語句自己沒有返回值,或者說老是返回undefined。spa

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。code

由於:雖然yield後面的表達式有值,yield能夠像return同樣返回緊跟在yield語句後面的表達式的值。可是yield語句自己沒有返回值,或者說老是返回undefined。htm

next()方法能夠帶一個參數,該參數會被看成上一條yield語句的返回值。blog

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

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有問題歡迎與我討論,共同進步。io

相關文章
相關標籤/搜索