JavaScript中 ES6 生成器的注意事项
生成器:generator。
function *generator(...) {...}
使用星号*就表示这是一个生成器。
不过,生成器并不是iterable,需要使用generator()来构造一个迭代器来供 for ... of 循环迭代。
function *something2() {
let nextVal;
while(true) {
if (nextVal === undefined) {
nextVal = 1;
} else {
nextVal = (3 * nextVal) + 6;
}
yield nextVal;
}
}
for (let v of something2()) { // 这里是something2() ,而不是something2
console.log(v);
if (v > 500) break;
}
// 1 9 33 105 321 969
生成器名字加(),就产生一个迭代器,而 for...of 循环需要的是一个iterable。所以,生成器的迭代器也是一个iterable。