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 有一个作用就是先执行其他的函数,再执行本函数。

 

转载于:https://www.cnblogs.com/lixiaoxuan/articles/10679303.html

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页