标签:定时器 console 函数 生成器 yield next result log
定义生成器函数
生成器函数和普通函数定义没有太大的差别,只是函数名前面多了一个*
function * gen(){
console.log(111)
}
执行生成器函数
生成器函数直接调用函数不会执行,需要调用生成器函数内部的next方法函数才会执行
function * gen(){
console.log(111)
}
let result = gen()
result.next()
//输出111
yield语句
yield语句会把函数分为几个部分,然后调用next函数异步去执行
function * gen(){
console.log(111)
yield one()
console.log(222)
yield two()
console.log(333)
yield three()
console.log(444)
}
let result = gen()
result.next()
result.next()
result.next()
result.next()
上诉yield语句把函数分为4个部分
第一部分为
console.log(111)
yield one()
第二部分为
console.log(222)
yield two()
第三部分为
console.log(333)
yield three()
第四部分为
console.log(444)
yield语句的返回值:
生成器函数执行之后,yield语句内的值以对象的形式返回,value中对应着yield语句中的值,done:代表着这个函数的异步任务是否走到结尾,false(没有走到结尾),true(走到了结尾)
生成器函数的传参问题
- 第一次调用生成器函数时的传参,为生成器的形参
下面代码中的实参AAA对应着形参args - 第二个next传入的实参对应第一个yield语句的返回值
下面代码中的实参CCC对应的第一个yield语句的返回值aaa - 第三个next传入的实参对应第二个yield语句的返回值
下面代码中的实参DDD对应的第一个yield语句的返回值bbb - 第四个next传入的实参对应第三个yield语句的返回值
下面代码中的实参EEE对应的第一个yield语句的返回值ccc
function * gen(args){
console.log(args);
let aaa = yield '111'
console.log(aaa);
let bbb = yield '222'
console.log(bbb);
let ccc = yield '333'
console.log(ccc);
}
gen函数的传参和调用问题
let result = gen('AAA')
//做为前一个yield整体的返回结果
console.log(result.next());
console.log(result.next('CCC'));
console.log(result.next('DDD'));
console.log(result.next('EEE'));
//输出结果
//AAA
//{ value: '111', done: false }
//CCC
//{ value: '222', done: false }
//DDD
//{ value: '333', done: false }
//EEE
//{ value: undefined, done: true }
讲完啦
谢谢大家的观看
标签:定时器,console,函数,生成器,yield,next,result,log 来源: https://blog.csdn.net/weixin_58498354/article/details/123645132
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。