生成器函数的调用
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对应的值是可以遍历的,所以可以使用对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到数组之中。 生成器实际中很少使用,简单理解即可。