在 JavaScript 中,使用 for-of 循​​环迭代生成器会忽略 return 语句,为什么?

Fai*_*man 6 javascript iterator generator for-of-loop

仔细看看代码

function* NinjaGenerator() {
  yield "yoshi";
  return "Hattori";
}
for (let ninja of NinjaGenerator()) {
  console.log(ninja);
}

// console log : yoshi
Run Code Online (Sandbox Code Playgroud)

为什么“服部”没有登录?当我们使用 iterator.next() 迭代迭代器时,它会显示该值。

function* NinjaGenerator() {
  yield "yoshi";
  return "Hattori";
}

let ninjaIterator = NinjaGenerator();
let firstValue = ninjaIterator.next().value;
let secondValue = ninjaIterator.next().value;
console.log(firstValue, secondValue);

// console log: yoshi Hattori
Run Code Online (Sandbox Code Playgroud)

有人请帮助我理解 for-of 循​​环在生成器创建的迭代器中如何工作?

Bar*_*mar 5

的值next()具有done区分返回值和生成值的属性。产生的值有done = false,而返回的值有done = true

for-of处理值直到done = true,并忽略该值。否则,没有显式return语句的生成器总是会在循环undefined中产生额外的内容for。当您编写生成器时,您必须对其进行编码以用于return最后一次迭代,而不是yield,这会使它不必要地复杂化。很少需要返回值,因为您通常只需要一致的生成值。

  • 实际上从来不需要它。理论上,生成器可以在迭代完成后使用它返回某种摘要。但这意味着您必须使用对“.next()”的显式调用来获取结果,而不是正常的迭代语法。 (3认同)