generatoe函数的写法一般如下
function* demo(){
yield 'hello';
yield 'world';
return 'ending';
}
var p = new demo();
这个函数不会执行而是返回一个遍历器对象,当执行.next()会执行yield语句,然后返回一个对象
{value:'hello', done: false},当next()到return语句时,会返回一个对象{value:'ending', done:true}
******************************************************************
yield必须放在generator函数中,不然会出错,yield表达式如果用在另一个表达式中,必须放在圆括号中
***********************************************************************
由于generator函数就是遍历器生成函数,因此可以把这个函数赋给一个对象的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}
上面函数的意思就是在next()中如果传进参数,这个参数就是上一个yield的返回值
*******************************************************
for of会遍历generator函数,最常用的用法就是将generator函数赋给一个对象的symbol.iterator属性,这样就可以遍历了
***************************************************
就是你再generator中抛出的错误可以在generator中捕获,也可以在外层函数中捕获
*****************************************************
promise.return()中的参数作为返回对象的value的值,而done值为true
如果包含try finally那么会等到finally中的语句结束后在调用return()
*******************************************************
yield * 用于在generator函数中嵌入一个generator函数,yield*
后面可以是数组,或者字符串
**********************************************
generator没有this,可以将函数用call在另一对象中运行,或者是generator函数的原型