总字数 431
预计阅读时间 1 分钟
function *
声明可以用于定义一个生成器函数 , 它返回一个Generator对象
语法
function * name([param[,param[,...param]]]) { statement }
生成器是一种可以从中退出后重新进入的函数
函数内部的局部变量会在每次执行后被保存 , 下次进入可以继续使用
调用生成器函数并不会执行它的主体 , 而是返回对应的一个Generator对象
当这个对象的next()
方法被调用时 , 生成器函数的主体会被执行至第一个yield
表达式 , 该表达式定义了生成器本次生成的值
next()方法返回一个对象
包含value属性 , 是本次生成的值
以及done属性 , 表示生成器是否已经产出了最后一个值 ( 产出最后的值之后 , 调用next返回的对象当中value都是undefined )
Generator对象中的方法
- Generator.prototype.next()
返回一个由yield表达式生成的值- Generator.prototype.return( [val] )
返回给定的值并结束生成器- Generator.prototype.throw( [msg] )
向生成器抛出一个错误
1 | function * num() { |
yield *
可以将生成器中需要生成的值委派至另一个生成器
1 | function* anotherGenerator(i) { |
生成器函数在浏览器当中的兼容性不佳 , 更推荐在nodejs当中使用 , 而不是在页面脚本当中使用