Generator函数

简介: generator

1.为什么要用它?

 要用一种工具,它必须有它的价值,首先说一说它的特点。函数的类型目前有四种:普通函数、箭头函数、异步函数、还有Generator函数。Generator的作用是,改善回调地狱,将异步嵌套写成同步写法。

(1)函数定义上的区别:

 Generator函数是一个普通的函数,但是他也有自己的特点:1)在function关键字和函数名之间有一个*(星号)号,这个星号可以跟在function右上角,也可以跟在函数名左上角,都可以;2)内部使用yield关键字,用来chn内部不同的状态产出。

(2)返回值的区别:

   Generator是一个普通函数,调用也是在后面加圆括号,但是与普通函数比,区别在于,普通函数会立即执行并产出一个结果,但是Generator不是,它一定会返回一个对象,一个指针对象,也就是iterator Object.要想指针往下移动,需要调用next()方法,函数中的yield相当于暂停,遇到下一个yield或者return就会暂停,使用next可恢复执行,调用next方法,当流程尚未结束时,会返回一个对象,这个对象的value值,就时yield表达式的值,如果结束了,就会返回undefined

(3)yield表达式

   yiled表达式最后会产生一个对象,对象包含两个属性,value和done,value的值就是yield表达式返回的值,done表示是否执行结束

(4)yield语句会返回一个值,且只有用next方法,指针才会向下移动,相当于惰性求值,yield关键字和return的区别在于:

     1)求值时机:return 会在函数调用后立即执行,而yield会在使用next方法后才执行
     2)返回次数和记忆功能:return 不具备记忆功能,而yield表达式会在使用next后从上次暂停的位置开始向下接着执行,并且可以多次返回状态值

(5) generator函数也可以不用yield表达式,这样函数就变成了一个简单的暂缓执行函数,但是,yield表达式却只能用在generator当中,用在其他地方会报错,另外,yield表达式放在表达式中时,必须放在括号内,否则会报语法错误。
(6) next方法的参数:next方法的参数是上一次yield产生的结果,因此,可以根据next的参数去改变函数的状态,在第一次使用next方法时,传入的参数会被忽略,默认无效,第一次使用next方法实际上是启动遍历器,可以不用带参数。

相关文章
|
1月前
|
存储 JavaScript 前端开发
generator
【10月更文挑战第30天】Generator 为 JavaScript 中的异步编程和数据处理提供了一种优雅而强大的解决方案,它的暂停和恢复执行特性使得异步代码更易于理解和维护,同时在迭代器、可迭代对象和惰性求值等方面也有广泛的应用,能够提高代码的可读性、可维护性和性能。
|
7月前
|
前端开发
ES6之生成器(Generator)
生成器(Generator)是ES6引入的一种特殊的函数,它可以通过yield关键字来暂停函数的执行,并返回一个包含value和done属性的对象。生成器的概念、作用和原理如下所述:
72 0
|
7月前
ES6 Generator 函数
ES6 Generator 函数
23 # generator 的使用
23 # generator 的使用
60 0
|
1月前
|
JavaScript 前端开发
Generator 函数的执行流程是怎样的?
【10月更文挑战第30天】Generator函数的执行流程通过 `next()` 方法的调用实现暂停和恢复执行,结合 `yield` 关键字以及参数传递和错误处理机制,提供了一种灵活而强大的编程模式,可用于处理异步操作、数据生成与迭代等多种复杂的编程任务。
|
1月前
|
存储 JavaScript 前端开发
Generator 函数的使用场景有哪些?
【10月更文挑战第30天】Generator函数在JavaScript中提供了一种强大而灵活的编程模式,能够在异步编程、数据处理、状态管理等多个领域发挥重要作用,帮助开发者更高效地解决各种复杂的编程问题,提高代码的可读性和可维护性。
|
2月前
|
Python
Generator 函数
Generator 函数是 ES6 引入的一种异步编程解决方案,它允许函数执行过程中暂停并保存当前状态,待需要时再恢复执行。通过 `function*` 定义,使用 `yield` 关键字控制暂停点。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
生成器(Generator)
生成器(Generator)
|
5月前
|
JavaScript 前端开发 Python
Generator
【7月更文挑战第9天】
28 1
|
7月前
|
JavaScript 容器
generator 和 yield的使用
generator 和 yield的使用
46 0