generatoe函數(shù)的寫法一般如下
function*? demo(){
yield? 'hello';
yield? 'world';
return? 'ending';
}
var p = new demo();
這個函數(shù)不會執(zhí)行而是返回一個遍歷器對象,當(dāng)執(zhí)行.next()會執(zhí)行yield語句,然后返回一個對象
{value:'hello', done: false},當(dāng)next()到return語句時,會返回一個對象{value:'ending', done:true}
******************************************************************
yield必須放在generator函數(shù)中,不然會出錯,yield表達(dá)式如果用在另一個表達(dá)式中,必須放在圓括號中
***********************************************************************
由于generator函數(shù)就是遍歷器生成函數(shù),因此可以把這個函數(shù)賦給一個對象的symbol.iterator屬性
**************************************************************************
function *f(){
?for(var i = 0; true; i++){
var reset = yield i;
if(reset) { i = -1}
}
}
var g = f();
g.next() //{value: 0, done: false}
g.next();//{value: 1, done: false}
g.next(true);//{value:0, done: false}
上面函數(shù)的意思就是在next()中如果傳進(jìn)參數(shù),這個參數(shù)就是上一個yield的返回值
*******************************************************
for of會遍歷generator函數(shù),最常用的用法就是將generator函數(shù)賦給一個對象的symbol.iterator屬性,這樣就可以遍歷了
***************************************************
就是你再generator中拋出的錯誤可以在generator中捕獲,也可以在外層函數(shù)中捕獲
*****************************************************
promise.return()中的參數(shù)作為返回對象的value的值,而done值為true
如果包含try finally那么會等到finally中的語句結(jié)束后在調(diào)用return()
*******************************************************
yield * 用于在generator函數(shù)中嵌入一個generator函數(shù),yield*
后面可以是數(shù)組,或者字符串
**********************************************
generator沒有this,可以將函數(shù)用call在另一對象中運行,或者是generator函數(shù)的原型