- Generator函数可以说是Iterator接口的具体实现方式
- Generator 最大的特点就是可以控制函数的执行。
function* foo(x) {
var y = 2 * ( yield (x + 1) )
var z = yield ( y / 3 )
return (x + y + z)
}
var a = foo(5);
console.log(a.next())
console.log(a.next(12))
console.log(a.next(13))
function* fibonacci() {
let prev = 0,
curr = 1
while(1){
yield curr
let temp = prev
prev = curr
curr = curr + temp
}
}
for(let n of fibonacci()){
if(n > 1000) break;
console.log(n);
}
// yield* 用来在一个 Generator 函数里面执行另一个 Generator 函数。
// 可以很方便地取出嵌套数组的所有成员。
function* iterTree(tree) {
if(Array.isArray(tree)){
for(let v of tree){
yield* iterTree(v)
}
}else {
yield tree
}
}
let tree = ['A', ['B','C'],['D',['E','F']],'G']
console.log(...iterTree(tree))