Meh*_*oha 7 javascript functional-programming generator ecmascript-6 spread-syntax
我期望 4 成为序列数组的一部分,为什么它被跳过了?
function* generate() {
yield 1;
yield 2;
yield 3;
return 4
}
let sequence = [...generate()];
console.log(sequence); // 1, 2, 3Run Code Online (Sandbox Code Playgroud)
生成器函数的值return不被视为序列的一部分。.next()它从最后一次调用返回{done: true, value:\xe2\x80\xa6},其中done: true表示序列已完成并且.next()不应再次调用。
为什么会这样,为什么我们不能直接生成done标志设置为 的最后一个值true?因为这样我们就无法用迭代器表示空序列 - 第一次.next()调用已经导致至少一个值。1
因此,通常情况下,生成器函数不会返回任何内容(但是),并且所有序列值都使用相同的语法生成 - 最后一个值2undefined没有奇怪的特殊语法:
function* generate() {\n yield 1;\n yield 2;\n yield 3;\n yield 4;\n}\nRun Code Online (Sandbox Code Playgroud)\n1:其他语言的做法有所不同。在那里,迭代器有一个单独的.hasNext()方法,可以在 before .next()调用,或者它们的.next()方法返回一个值或引发StopIteration异常。它们没有任何“最终价值”。
\n2: 必须事先知道某个值是最后一个值并使用return而不是\nyield它会使动态生成序列的逻辑变得更加复杂。
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |