generator生成器
函数末尾如果没有return,就是隐含的return undefined;
let fbnq = (max)=>{ // 手写斐波那契数列
let a = 0 ;
let b = 1;
let c;
let arr = [0,1]
while(arr.length<max){
c = a +b;
a = b;
b = c ;
// [a,b] = [b,a+b] // 解构赋值
arr.push(c)
}
return arr;
}
let fbnq2 = function* (max){ // 手写斐波那契数列
let a = 0 ;
let b = 1;
let c;
let arr = []
while(arr.length<max){
yield a
arr.push(a)
c = a +b;
a = b;
b = c ;
// [a,b] = [b,a+b] // 解构赋值
}
return arr;
}
console.log(fbnq(10))
for(let val of fbnq2(5)){
console.log(val)
}
console.log(fbnq2(5).next())
在前端开发过程中我们经常需要先请求后端的数据,再用拿来的数据进行使用网页页面渲染等操作,然而请求数据是一个异步操作,而我们的页面渲染又是同步操作,这里ES6中的generator就能发挥它的作用,使用它可以像写同步代码一样写异步代码。下面是一个例子,先忽略下面的写法,后面会详细说明。如果你已经理解generator基础可以直接跳过这部分和语法部分,直接看深入理解的部分。
function *foo() {
// 请求数据
var data = yield makeAjax('http://www.example.com');
render(data);
}