ES6 生成器函數

ES6生成器函數

  • 生成器函數

生成器函數與普通函數的區別

普通函數生成器函數
普通函數一旦運行,不能中途暫停生成器函數可以中途暫停
普通函數每次都從開始的時候開始執行生成器函數是從上次暫停的位置繼續執行
  • 生成器函數創建
  • 函數定義時,在function後加*的就是生成器函數
  • *的位置沒有要求
 //生成器函數
    //在函數定義時,在function 後加*的就是生成器函數
    function* fun(){
        console.log('函數執行');
        yield '函數繼續執行'
        console.log('函數執行')
        yield '函數繼續執行'
        console.log('函數執行')
    }
    //生成器函數在調用時是不執行的,會返回一個對象,這個對象有個next方法
    let i=fun();
    console.log(i)

生成器函數

  • 生成器函數執行流程

流程

<script>
        //生成器函數
        //在函數定義時,在function 後加*的就是生成器函數
        function* fun() {
            console.log('1');
            yield '2'
            console.log('3')
            yield '4'
            console.log('5')
            return
        }
        //生成器函數在調用時是不執行的,會返回一個對象,這個對象有個next方法
        let i = fun();
        console.log(i)
        let o = i.next();
        console.log(o.value, o.done, o.done ? '函數執行完畢' : '函數未執行完畢')
        //調用next方法後,函數執行到 第一個yield停止 會返回一個對象{value:'',done:''}
        //value的值爲yield的值
        //done有兩個值 true false
        //false 函數爲執行完畢
        //true 函數執行完畢
        o = i.next()
        console.log(o.value, o.done, o.done ? '函數執行完畢' : '函數未執行完畢')
        //第二次調用,會從上次退出的位置,執行到下面的第一個yield停止 返回一個對象
        o = i.next()
        console.log(o.value, o.done, o.done ? '函數執行完畢' : '函數未執行完畢')
    //第三次調用時,會從上一次函數退出的位置,繼續執行,到下一個yield停止
    //直到遇到return
    </script>

過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章