JavaScript中发电机函数如何使用

  介绍

这篇文章给大家介绍JavaScript中发电机函数如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

发电机函数是es6提供的一种异步编程的解决方案,语法行为与传统函数完全不一样。

发电机函数有多种理解角度,从语法上,首先可以把它理解成,发电机函数是一个状态机,封装了多个内部状态。

行发电机函数会返回一个遍历器对象,也就是说,发电机函数除了是状态机还是一个遍历器对象生成函数。返回遍历器对象,可以依次遍历发电机函数内部的每一个状态。

下面话不多说了,来一起看看详细的介绍吧

<强>语法上

首先可以把它理解成,发电机函数是一个状态机,封装了多个内部状态。执行发电机函数会返回一个遍历器对象,也就是说,发电机函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历发电机函数内部的每一个状态。

<强>形式上

发电机函数是一个普通函数,但是有两个特征。

,一是,函数关键字与函数名之间有一个星号;
,二是,函数体内部使用产量表达式,定义不同的内部状态(收益率在英语里的意思就是“产出”)。

<强>调用上

发电机函数的调用方法与普通函数一样,也是在函数名后面加上一对圆括号。不同的是,调用发电机函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象,也就是上一章介绍的遍历器对象(迭代器对象)。我们必须调用遍历器对象的一方法,使得指针移向下一个状态。也就是说,每次调用一方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个收益表达式(或返回语句)为止。换言之,发电机函数是分段执行的,收益表达式是暂停执行的标记,而下一方法可以恢复执行

函数*,helloWorldGenerator (), {   ,油品收率& # 39;你好# 39;;   ,油品收率& # 39;& # 39;;   ,return  & # 39;结束# 39;;   }      var  hw =, helloWorldGenerator ();   hw.next ()//,{,价值:& # 39;你好# 39;,,:,false }      hw.next ()//,{,价值:& # 39;& # 39;,,:,false }      hw.next ()//,{,价值:& # 39;结束,,,:,true }      hw.next ()//,{,值:未定义,,:,true }

调用发电机函数,返回一个遍历器对象,代表生成器函数的内部指针。以后,每次调用遍历器对象的一方法,就会返回一个有着价值和完成两个属性的对象value属性表示当前的内部状态的值,是产量表达式后面那个表达式的值,完成属性是一个布尔值,表示是否遍历结束。

<强>产量表达式

产量表达式与返回语句既有相似之处,也有区别。相似之处在于,都能返回紧跟在语句后面的那个表达式的值。区别在于每次遇到产量、函数暂停执行,下一次再从该位置继续向后执行,而返回语句不具备位置记忆的功能。一个函数里面,只能执行一次(或者说一个)返回语句,但是可以执行多次(或者说多个)产量表达式。正常函数只能返回一个值,因为只能执行一次回报,发电机函数可以返回一系列的值,因为可以有任意多个收益。从另一个角度看,也可以说发电机生成了一系列的值,这也就是它的名称的来历(英语中,发电机这个词是“生成器”的意思)。

<>强语法注意点:

1。收益表达式只能用在发电机函数里面

2.收益表达式如果用在另一个表达式之中,必须放在圆括号里面

3。收益表达式用作函数参数或放在赋值表达式的右边,可以不加括号。

例如:

函数*,演示(),{   ,foo(油品收率& # 39;一个# 39;,,油品收率& # 39;b # 39;);//,好吧=,let  input 产量;//,好吧   }

<强>下一方法的参数

产量表达式本身没有返回值(就是说让=产量;会返回未定义),或者说总是返回undefined.next方法可以带一个参数,该参数就会被当作上一个收益表达式的返回值(注意,是表达式的返回值,例如让收益率..........=参数会是一个的值并且会覆盖表达式之前的值)。

函数*,f (), {   ,(var 小姐:=,0,,真的,,我+ +),{   ,var  reset =,油品收率我;   ,console.log(重置);   ,如果(重置){,小姐:=,1,,}   ,}   }      var  g =, f ();      g.next ()

 JavaScript中发电机函数如何使用“> <h2 class=JavaScript中发电机函数如何使用