yield 跟 yield * 的区别
yield
表达式的值,是下一个iter.next
的参数值
yield*
表达式的值,是yield*
后的iterable
在done
为true
时的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 有一个作用就是先执行其他的函数,再执行本函数。