yield*语句
如果yield命令后面跟的是一个遍历器,需要在yield命令后面加上星号,表明它返回的是一个遍历器。这被称为yield*语句。
其实yield关键字就是以一种更直观、便捷的方式让我们创建用于遍历有限序列集合的迭代器,而yield则用于将生成器函数的代码切片作为有限序列集合的元素(元素的类型为指令+数据,而不仅仅是数据而已)。下面我们一起看看yield关键字是怎样对代码切片的吧!
// 定义生成器函数
function *enumerable(msg){
document.write(msg)
var msg1 = yield msg + ' after '
document.write(msg1)
var msg2 = yield msg1 + ' after'
document.write(msg2 + ' over')
}
上述代码最终会被解析为下面的代码:
var enumerable = function(msg){
var state = -1
return {
next: function(val){
switch(++state){
case 0:
document.write(msg + ' after')
break
case 1:
var msg1 = val
document.write(msg1 + ' after')
break
case 2:
var msg2 = val
document.write(msg2 + ' over')
break
}
}
}
}