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>