ES12 Generator 函数的进一步使用及特性介绍

Generator 函数是 ES6 中引入的一种特殊函数,它可以通过 yield 关键字将函数执行的控制权交出去,然后再次通过 next 方法控制函数的执行流程。在 ES12 中,Generator 函数又有了一些新的特性和用法,本文将对其进行详细介绍。

Generator 函数的基本使用

首先,我们来回顾一下 Generator 函数的基本用法。下面是一个简单的示例:

--------- ------------- -
  ----- --
  ----- --
  ----- --
-

----- --------- - --------------

------------------------------------ -- -
------------------------------------ -- -
------------------------------------ -- -

在这个示例中,我们定义了一个 Generator 函数 myGenerator,它通过 yield 关键字返回了三个值。然后我们创建了一个 generator 实例,并通过 next 方法控制函数的执行流程,最终输出了三个值。

Generator 函数的新特性

在 ES12 中,Generator 函数又新增了一些特性,让它更加强大和灵活。

1. yield* 关键字

ES12 中新增了 yield* 关键字,它可以将执行权交给另一个 Generator 函数,这样可以实现更加复杂的控制流程。下面是一个示例:

--------- -------------- -
  ----- --
  ----- --
-

--------- -------------- -
  ------ ---------------
  ----- --
-

----- --------- - ---------------

------------------------------------ -- -
------------------------------------ -- -
------------------------------------ -- -

在这个示例中,我们定义了两个 Generator 函数 myGenerator1myGenerator2,它们分别返回了一些值。然后在 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