生成器函数的调用

Q: 
为啥fn()调用不了函数?而arr=[...fn()]却运行了啊?不是next才行?
function*fn(){

            console.log(1);

            yield 1+1;

            console.log(2);

            yield 2-2;

        }

        // fn();

        const arr=[...fn()];

        console.log(arr);
A:因为function* 这种声明方式(function关键字后跟一个星号)会定义一个生成器函数 (generator function),它返回一个 Generator 对象。所以说调用fn()并不会执行里面的语句,而是需要通过next方法去执行语句,
            //生成器函数的调用
            function* fn(){
                console.log(1);
                yield 1+1;
                console.log(2);
                yield 2-2;
            }            
            var ge = fn();
            ge.next();
            ge.next();
            //const arr = [...fn()];
            //console.log(arr);
            
因为生成器返回对象中, yield对应的值是可以遍历的,所以可以使用对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到数组之中。

生成器实际中很少使用,简单理解即可。

猜你喜欢

转载自www.cnblogs.com/rickdiculous/p/13200866.html