Generator 函数是 ES6 中引入的一种特殊函数,它可以通过 yield 关键字将函数执行的控制权交出去,然后再次通过 next 方法控制函数的执行流程。在 ES12 中,Generator 函数又有了一些新的特性和用法,本文将对其进行详细介绍。
Generator 函数的基本使用
首先,我们来回顾一下 Generator 函数的基本用法。下面是一个简单的示例:
-- -------------------- ---- ------- --------- ------------- - ----- -- ----- -- ----- -- - ----- --------- - -------------- ------------------------------------ -- - ------------------------------------ -- - ------------------------------------ -- -
在这个示例中,我们定义了一个 Generator 函数 myGenerator
,它通过 yield
关键字返回了三个值。然后我们创建了一个 generator
实例,并通过 next
方法控制函数的执行流程,最终输出了三个值。
Generator 函数的新特性
在 ES12 中,Generator 函数又新增了一些特性,让它更加强大和灵活。
1. yield*
关键字
ES12 中新增了 yield*
关键字,它可以将执行权交给另一个 Generator 函数,这样可以实现更加复杂的控制流程。下面是一个示例:
-- -------------------- ---- ------- --------- -------------- - ----- -- ----- -- - --------- -------------- - ------ --------------- ----- -- - ----- --------- - --------------- ------------------------------------ -- - ------------------------------------ -- - ------------------------------------ -- -
在这个示例中,我们定义了两个 Generator 函数 myGenerator1
和 myGenerator2
,它们分别返回了一些值。然后在 myGenerator2
中使用了 yield*
关键字,将执行权交给了 myGenerator1
,最终输出了所有的值。
2. return
方法
ES12 中还新增了 return
方法,它可以通过 Generator 函数返回一个值,并且结束函数的执行。下面是一个示例:
-- -------------------- ---- ------- --------- ------------- - ----- -- ----- -- ----- -- - ----- --------- - -------------- ------------------------------------ -- - ------------------------------------------- -- --- ------------------------------ -- - ------ ---------- ----- ---- -
在这个示例中,我们使用了 return
方法,返回了一个值,并且结束了 Generator 函数的执行。
3. throw
方法
ES12 中还新增了 throw
方法,它可以在 Generator 函数中抛出一个异常,并且结束函数的执行。下面是一个示例:
-- -------------------- ---- ------- --------- ------------- - --- - ----- -- ----- -- ----- -- - ----- --- - --------------------- --- - - ----- --------- - -------------- ------------------------------------ -- - ------------------------------------- -- ------ ---- - ------ ---------- ----- ---- -
在这个示例中,我们使用了 throw
方法,在 Generator 函数中抛出了一个异常,并且结束了函数的执行。
总结
在本文中,我们介绍了 ES12 中 Generator 函数的新特性和用法,包括 yield*
关键字、return
方法和 throw
方法。通过这些新特性,我们可以更加灵活地控制函数的执行流程,实现更加复杂的业务逻辑。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65d31ff5add4f0e0ffb64218