Generator

作者: c菜鸟 | 来源:发表于2018-03-10 00:15 被阅读0次

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函数的原型

相关文章

网友评论

      本文标题:Generator

      本文链接:https://www.haomeiwen.com/subject/jegmfftx.html