generator函数是es6引入的,主要用于异步编程
generator最大特点是交出函数的执行权(即暂停执行,通过yield实现该功能)
1. 函数名之前有个星号,以示区别
它不同于普通函数,是可以暂时执行的
2.generator函数体内部使用yield语句
yield语句只能在generator语句中使用,普通函数不行。现在比较流行数据驱动视图,yield语句可以定义不同的内部数据。
本质上,整个generator函数就是一个封装的异步任务。yield命令是异步不同阶段的分界线,所以说,有时也会把yield当做return。当然了,yield跟return有本质的不同。
普通函数是通过调用函数的形式,但generator函数要让它动起来,需要用`.next()`方法,我们可以理解为是一个“启动方法”,作用是分阶段的执行generator函数。
每次调用.next()方法,会返回一个对象,表示当前阶段的信息,value属性,done属性:true表示函数已经执行完了,false表示函数还没执行完。
每当你调用了一个迭代器nebula的.next()方法,generator函数内部的指针,就是从上一次停下的地方继续运行,直到遇到下一个yield语句。每个迭代器之间是相互独立的,作用域独立
那为什么说是迭代器对象呢?
因为他得把里面的yield语句都走一遍,yield就像录音机上的暂停键,next就像录音机上的继续键。
传入的参数,其实是把上一个yield语句的返回值给覆盖掉。所以,第一个.next()方法其实是启动器,在它之前没有yield语句,因此给第一个.next()方法传参数是没有意义的。
以下的例子最能体现generator函数用途的例子。
就是通过.next()方法,分阶段的注入数据,让函数分阶段的给出不同的返回值
用来迭代generator函数在执行时,生成的那个迭代对象。
上一篇:南京邮电大学数据库第一次课后作业
下一篇:ajax学习1