Skip to content

Instantly share code, notes, and snippets.

@alanwei43
Last active May 13, 2019 05:38
Show Gist options
  • Save alanwei43/d2f74ff423ab97bf5f900ea7ad28cc1b to your computer and use it in GitHub Desktop.
Save alanwei43/d2f74ff423ab97bf5f900ea7ad28cc1b to your computer and use it in GitHub Desktop.
JavaScript 迭代器
function* createGenerator() {
    let first = yield 1;
    let second = yield first + 2;
    yield second + 3;
}
let iterator = createGenerator();

iterator.next(); // { value: 1, done: false}
iterator.next(4);// { value: 6, done: false}
iterator.next(5);// { value: 8, done: false}
iterator.next(); // { value: undefined, done false}
  • 传给 next() 方法的参数会替代上一次yield的返回值.
  • 在一个含参的yield语句中, 表达式右侧等价于第一次调用next()返回后的下一个返回值, 表达式左侧等价于第二次调用next()方法后, 在函数继续执行前得到的返回值.
调用代码 对应函数内部执行代码
next() yield 1
next(4) let first = yield 1
yield first + 2
next(5) let second = yield first + 2
yield second + 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment