javascript - 解构数组如何与生成器函数一起工作?

标签 javascript ecmascript-6 destructuring

我发现这个例子,我对从生成器获取生成器的最终值的方式感到惊讶。这是代码:

function* foo() {
  yield 'a';
  yield 'b';
  yield 'c';
}

const [...values] = foo();

根据我对生成器的理解,我认为解构生成器执行相当于:

const array = [];
for(const val of foo()) {
    array.push(val)
}

所以,我的问题是:这是获取生成器函数值的有效方法吗?还有哪些其他方法可以实现此目的?

最佳答案

迭代(可迭代和迭代器)协议(protocol)为您提供了无限的可能性...

function* foo() {
  yield 'a';
  yield 'b';
  yield 'c';
}

const [...values] = foo();

console.log(...values);

function* foo() {
  yield 'a';
  yield 'b';
  yield 'c';
}

const [a, b, c] = foo();

console.log(a, b, c);

function* foo() {
  yield 'a';
  yield 'b';
  yield 'c';
};

let values = [];

for (const str of foo()) {
  values.push(str);
}

console.log(values[0], values[1], values[2]);

function* foo() {
  yield 'a';
  yield 'b';
  yield 'c';
}

const [a, b, ...values] = Array.from(foo());

console.log(a, b, values.toString());

let foo = (function* () {
  yield 'a';
  yield 'b';
  yield 'c';
})();

console.log(foo.next().value, foo.next().value, foo.next().value);

关于javascript - 解构数组如何与生成器函数一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44008210/

相关文章:

javascript - 如何将Vue代码放入vue中的<code>标签中

javascript - ES6 导出的意外标记

javascript - Shim 与 Sham : What is the difference?

ecmascript-6 - ES6 : If class has method?

JavaScript:反向对象解构/重构代码以更新对象

javascript - 如果滚动更改背景图像

php - 使用 jQuery 时控制缓存

javascript - ES6 解构和模块导入

javascript - 使用 Rangy 的 iOS 风格格式化标注

javascript - 嵌套对象解构