refer to:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*
这个yield跟ruby中的完全不一样。
直接看例子:
function *hi(i){ yield i; yield i + 30; yield i + 20; }
运行:
let a = hi(1)
a.next() => Object { value: 1, done: false } 首次运行, 执行第一个yield
a.next() => Object { value: 31, done: false } 执行第二个yield
a.next() => Object { value: 21, done: false } 执行第三个yield 有value
a.next() => Object { value: undefined, done: true } 没有value, done = true
所以,可以看出:
function * 会定义一个 “生成器函数”
每次运行next() 都会执行其中的yield.
多个yield执行完毕后, 返回的结果中, done = true
多个yield的值不会互相影响。例如上面的例子中, 第二个 i + 30 之后,第三个yield, i + 20 , 此时的i 还是首次传入该函数的i(1)