es6 之 generator(二)
之前说过generator 函数是将函数拆分,具体的请往下面看
yield 之传递参数
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> <script> // function *sayName(){ console.log(1); let name=yield; console.log(name); console.log(2); } let say=sayName(); say.next('我是谁呀?') say.next('你是xqzi') </script> </html>
上面的代码会输出什么呢? 答案就是 1、你是xqzi、2;看下面这张图,我们将函数一分为二 ,红色圆圈包围的就是 say.next('我是谁呀?'),这样的话是不是会清楚一点呢

那么上面输出的是不是稍微理解一点了呢?也就是说 第一个next()函数是无法传递参数的,那么假如我们需要默认值怎么办呢,我们可以这样写
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> <script> // function* sayName(arg) { console.log(arg); let name = yield; console.log(name); } let say = sayName('我是默认值'); say.next() say.next('我是传递的name值') </script> </html>
yield之返回值,请看下面的例子的返回结果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> <script> function *show(){ yield 5; } let gen=show(); let genResult=gen.next(); console.log(genResult);//{done: false,value: 5} let genResult2=gen.next(); console.log(genResult2);//{done: true,value: undefined} </script> </html>
yield 返回值更像是返回的中间值 ,generator在函数中对数据进行加工,并给数据一个是否处理完成的标识 done 完成时done为true 最后一步的返回值为underfined是为什么呢?因为最后并无返回值 我们可以再函数内部加上一个返回值,这样最后返回的值就是我们的return 值

浙公网安备 33010602011771号