Generator函数

Generator 函数是一个状态机,封装了多个内部状态。

执行 Generator 函数会返回一个遍历器对象。

 

最简单的例子

function * loop () {
  for (let i = 0; i < 5; i++) {
    yield console.log(i)
  }
}

let l = loop()
l.next()
l.next()
l.next()

0
1
2

 

yield 表达式  的结果为undefined

function * gen () {
  let a = yield 1
  console.log(a)
}

let g = gen()
g.next()
g.next()

undefined

 

yield后面可以接星号*,*号后面若是数组,代表遍历数组,后面也可以是generator函数

function * gen () {
  yield * [1, 2, 3] // 相当于yield 1 yield 2 yield 3
}

let g = gen()
console.log(g.next())
console.log(g.next())

Object { value: 1, done: false }
Object { value: 2, done: false }

 

 

因为yield可以控制Generator函数的暂停,所以Generator函数是可以在运行时改变参数的,用next方法传入想要修改的值,即改变yield 表达式的返回值

function * gen () {
  let a = yield 1
  console.log(a)
}

let g = gen()
g.next()
g.next(2)

2

 

posted @ 2020-08-09 15:56  AllenZhang_(*^▽^*)  阅读(104)  评论(0编辑  收藏  举报