具有生成器功能的解构数组如何工作?

时间:2017-05-16 17:42:11

标签: 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)
}

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

1 个答案:

答案 0 :(得分:5)

迭代 (可迭代和迭代器) 协议为您提供了各种可能性......



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);