yield 跟 yield * 的区别

yield表达式的值,是下一个iter.next的参数值

yield*表达式的值,是yield*后的iterabledonetrue时的value值。

yield * 的使用:


function* outer() {
  yield 'open'
  yield inner()
  yield 'close'
}

function* inner() {
  yield 'hello!'
  yield 'world'
}
gen=outer()

//结果:
gen.next()
{value: "open", done: false}
gen.next()
{value:inner, done: false}
gen.next()
{value: "close", done: false}
 

如果把上面的yield inner() 改成 yield * inner()呢

function* outer() {
  yield 'open'
  yield * inner()
  yield 'close'
}

function* inner() {
  yield 'hello!'
  yield 'world'
}
gen=outer()
//结果:
gen.next()
{value: "open", done: false}
gen.next()
{value: "hello!", done: false}
gen.next()
{value: "world", done: false}
gen.next()
{value: "close", done: false}

 如果把yield * inner() 改成yield * next呢?

function* outer(next) {
  yield 'open'
  yield * next
  yield 'close'
}

function* inner() {
 yield 'hello'
 a=2
 yield 'world'
}
gen=outer(inner())
gen.next()
gen.next()

结果:
value顺序:open》hello》world》close
a:2

 所以,yield * next 有一个作用就是先执行其他的函数,再执行本函数。

 

posted @ 2019-04-09 19:58  非非不可  阅读(1965)  评论(0编辑  收藏  举报