1·什么是生成器?
生成器是ES6中新增的一种函数控制,使用方案。它可以让我们更加灵活的控制函数什么时候继续执行,什么时候暂停执行等。
平时我们会编写很多的函数,这些函数终止条件通常是返回值或者发生了异常。
生成器函数也是一个函数,但是和普通的函数有一些区别:
1·生成器函数需要在function的后面加一个符号*
2·生成器函数可以通过yield关键字来控制函数的执行流程
3·生成器函数的返回值是一个Generator(生成器);生成器事实上是一种特殊的迭代器。
function* foo(){
console.log("函数开始执行~~~~~")
const value1 =100
console.log(value1)
yield
const value2 =200
console.log(value2)
yield
const value3 =300
console.log(value3)
yield
console.log("函数执行结束~~")
}
const generator=foo()
generator.next()
console.log("-------------")
generator.next()
console.log("-------------")
generator.next()
console.log("-------------")
generator.next()
/*
函数开始执行~~~~~
100
-------------
200
-------------
300
-------------
函数执行结束~~
*/
2·生成器函数传参
function* foo1(nums){
console.log("函数开始执行~~~~~")
const value1 =100+nums
console.log(value1)
const n = yield value1
//使用了return,就会提前中断生成器函数代码继续执行
const value2 =200 + n
console.log(value2)
const a = yield value2
const value3 =300 + a
console.log(value3)
yield value3
console.log("函数执行结束~~")
}
const generator1=foo1(10)
console.log("返回值1:",generator1.next())
console.log("返回值2:",generator1.next(25))
console.log("返回值3:",generator1.next(20))
console.log("返回值4:",generator1.next(60))
3·生成器的throw抛出异常
function* foo(){
console.log("代码开始运行~")
const value1 =100
try{
yield value1
}catch(error){
console.log("捕获到异常情况:",error)
yield "abc"
}
console.log("第二段代码继续执行~")
const value2 =200
yield value2
}
const generator =foo()
//console.log(generator.next())
//console.log(generator.throw("error message"))
const result =generator.next()
if (result.value!==200){
console.log(generator.throw("error message"))
}
/*
代码开始运行~
捕获到异常情况: error message
{ value: 'abc', done: false }
*/