Back

javascript - generator function: yield, next

发布时间: 2023-09-04 03:35:00

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)

Back