es6 --- 使用生成器交替执行
生活随笔
收集整理的這篇文章主要介紹了
es6 --- 使用生成器交替执行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
考慮以下場景:
var a = 1; var b = 2;function foo(){a++;b = b * a;a = b + 3; }function bar(){b--;a = 8 + b;b = a * 2; }foo(); bar(); console.log(a, b); // 11 22bar(); foo(); console.log(a, b); // 183 180對于上面的兩個函數foo和bar,它們中的任何一個,一旦開始了就會一直執(zhí)行下去直至完畢.
倘若,我們想在foo中a++后,暫停一下在去執(zhí)行bar中的某個語句… 可以使用ES6提供的yield語句.
改變如下:
可以看到,和正常函數執(zhí)行結果是一樣的…
還注意到.上述好多賦值語句是重復的,因此可以考慮構造一個輔助函數step,用于將yield返回的值原樣的傳入.
接下來使用step,先執(zhí)行bar,后執(zhí)行foo
var s1 = step(bar); var s2 = step(foo);s1(); // 1 1 s1(); // 1 1 s1(); // 9 1 s1(); // 9 18 s2(); // 10 18 s2(); // 10 180 s2(); // 183 180回歸主題,交替執(zhí)行bar和foo
var s1 = step(foo); var s2 = step(bar);s2(); // b-- ,yield s2(); // yield 8 s1(); // a++, yield s2(); // a = 8 + b, yield 2 s1(); // b= b * a, yield b s1(); // a = b + 3 s2(); // b = a * 2可以看到,bar 和foo 都經過了多次的停止與啟動,且它們之間進行了交替操作.
參考《你不知道的JavaScript》(中卷)P241~P242
總結
以上是生活随笔為你收集整理的es6 --- 使用生成器交替执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: es6 --- 解构赋值的简洁性
- 下一篇: 学校计算机维护投标书,信息化系统硬件及应