生成器函数与普通函数的区别
普通函数生成器函数普通函数一旦运行,不能中途暂停生成器函数可以中途暂停普通函数每次都从开始的时候开始执行生成器函数是从上次暂停的位置继续执行 生成器函数创建函数定义时,在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>