generator函数(含面试题)
generator函数
generator函数是es6提供的一种异步编程解决方案,这个方法比较抽象。 generator函数可以返回多次的函数看看下面这个例子你就很容易明白 如果一个普通函数要返回1-10就只能使用数组或者其他方式存储和generator就可以一次次返回
function* add() { for(let i =0; i<10; i++) { yield i; } } let a = add(); console.log(a.next()); //{value: 0, done: false} console.log(a.next());//{value:1, done: false} function add2() { let arr =[]; for(let i =0; i<10; i++) { arr.push(i); } return arr; } console.log(add2()); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
那么前面提到的异步编程是什么意思? 看一下这个例子你就会觉得
function* hello(){ console.log("hello开始执行"); yield ; //暂停 console.log("hello 执行结束") //执行完返回 } let h = hello(); h.next(); //开始执行 console.log("外部开始执行"); h.next();//重新回到hello console.log("外部执行结束");
这个操作有点类似pv操作,也可以理解成可以暂停的函数 另外还有一个很重要的点generator函数执行结束会返回一个空值 我们就拿上面的例子在来做一点改造
function* hello(){ console.log("hello开始执行"); yield 1; //暂停 console.log("hello 执行结束") //执行完返回 } let h = hello(); console.log(h.next()); //开始执行{value: 1, done: false} console.log("外部开始执行"); console.log(h.next());//重新回到hello{value: undefined, done: true} console.log("外部执行结束");
可以看出返回了一个对象value:1是返回的值,并且还有一个done用来判断执行结束了 ,当结束为true还没结束为false next也可以传参数
function* add(x){ var y = yield x +2; return y; } var g = add(1); console.log(g.next()); //{value: 3, done: false} console.log(g.next(4));//这里传入的4会作为上一次调用返回的结果 {value: 4, done: true}
谈谈对generator函数的理解
generator是es6提供的一种异步编程解决方案,是可以控制执行的函数,与普通函数相比关键字function与函数名之间多了一个*号,并且可以返回多个值(也是称为状态)
上一篇:
Java基础知识总结(2021版)
下一篇:
怎么将个人简历部署在github上?