11行代碼帶你搞懂 Generator 函數

程序員閉嘴不說話系列。

// 是不是 generator 函數只比普通函數多一個*,好簡單有木有?// 她和普通函數的區別是執行時可以插入。。。。。。其他代碼(出讓控制權)function* increase() { let i = 0 // 看到沒,優雅的死循環!這貨放到普通函數里會死機的 // 但是放在 generator 沒問題 while (true) { // 使用 yield 語句讓出控制權 // 有點像在這裡打了一個斷點,函數執行到這裡就停止了 yield i i++ }}// 執行 generator 函數,獲得函數執行迭代器// 對應調試就是我們開始調試let it = increase()// 執行到含有 yield 關鍵字的語句// 好比斷點調試中的,運行到下一個斷點// next() 返回值有兩個欄位// value 是 yield 後「出讓」的值,done 表示當前函數是否執行完成it.next() // {value: 0, done: false} // 在這裡 increase 函數並沒有執行完// 但是我們可以隨意插入自定義代碼console.log("啦啦啦,我是插入的代碼")// 繼續 next()// 下一次執行到 yield 的時候 i 已經加一it.next() // {value: 1, done: false}

以上


歡迎加入碼蜂社前端交流 3 群: 583594212

掃描下方二維碼或搜索「碼蜂社」公眾號,不怕錯過好文章:

推薦閱讀:

PHP 是做前台還是後台?前端和前台的區別?
雙向綁定的簡單實現——基於「臟檢測」
深入淺出React高階組件

TAG:JavaScript | 前端开发 | ECMAScript2015 |