生成器函數使用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));
本文做者starof,因知識自己在變化,做者也在不斷學習成長,文章內容也不定時更新,爲避免誤導讀者,方便追根溯源,請諸位轉載註明出處:http://www.cnblogs.com/starof/p/6962607.html有問題歡迎與我討論,共同進步。io