05-生成器和返回值
12.2.2 生成器和返回值
yield 表达式本身并不能让生成器结束,即使它是生成器的最后一个语句。在生成器的任何位置调用 return 都会使 done 的值变为 true ,而 value 的值则是任何被返回的值。例如:
function* abc() {
yield 'a';
yield 'b';
return 'c';
}
const it = count();
it.next(); // { value: 'a', done: false }
it.next(); // { value: 'b', done: false }
it.next(); // { value: 'c', done: true }
虽然这是正确的行为,但要记住,使用生成器的东西并不总会在意在 done 为 true 时的value值。比如,如果在 for…of 循环中用它,那么“c”是不会被打印的。
//将会打印“a”和“b”,但是没有“c”
for(let l of abc()) {
console.log(l);
}
建议不要在 `return` 中提供一个对生成器有意义的值。如果想在生成器之外使用某个值,应该用 `yield` ; `return` 应该只被用做提前停止生成器。出于这个原因,通常建议:在生成器中调用 `return` 的时候,不提供返回值。
建议不要在 `return` 中提供一个对生成器有意义的值。如果想在生成器之外使用某个值,应该用 `yield` ; `return` 应该只被用做提前停止生成器。出于这个原因,通常建议:在生成器中调用 `return` 的时候,不提供返回值。