refs
yield
yield*
function*
function*
demo
直接丢浏览器或者node里跑代码
函数的值产生和继续执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function* countAppleSales () { let saleList = [3, 7, 5] for (let i = 0; i < saleList.length; i++) { console.log('in func before yield'); yield saleList[i]; console.log('in func after yield'); } }
let appleStore = countAppleSales() setInterval(()=>{ console.log(appleStore.next()); },2000);
|
嵌套
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function* g1() { yield 2; yield 3; yield 4; }
function* g2() { yield 1; yield* g1(); yield 5; }
const iterator = g2();
console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next());
|
遍历输出
1 2 3 4 5 6 7 8 9 10 11 12
| function* foo() { yield 'a'; yield 'b'; yield 'c'; }
let str = ''; for (const val of foo()) { str = str + val; }
console.log(str);
|
在函数调用是可以传参数,同时,在next调用也是可以传参数