ES6 生成器函数
程序员文章站
2022-07-13 08:42:00
...
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>
上一篇: 与ES6生成器并发
下一篇: es6——关于迭代器和生成器