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