生成器函數使用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有問題歡迎與我討論,共同進步。