ES6 中 yield 的用法及说明

阅读时长 4 分钟读完

ES6 中 yield 的用法及说明

在 ES6 中,yield 是一个关键字,用于定义一个 Generator 函数。Generator 函数是一种特殊的函数,它可以在执行时中断,并且可以从中继续恢复执行。这使得它在协程和异步编程中非常有用。

Generator 函数使用 yield 关键字在函数中定义一个或多个断点。每次调用这个函数时,都可以从上一次 yield 的地方恢复执行,直到函数结束或者遇到新的 yield。

yield 的基本用法

在 Generator 函数中使用 yield,基本语法如下:

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

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

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

在上面的例子中,我们定义了一个名为 example 的 Generator 函数。在函数体中,我们使用 yield 定义了三个断点,其中分别返回了数字 1、2 和 3。我们通过调用 generator.next() 来执行 Generator 函数,在每次执行时,生成器会从上一次 yield 的地方继续执行,直到遇到新的 yield 语句或函数结束。

yield 的参数

我们可以在 yield 后面跟随一个表达式,将其作为 yield 返回的值。例如:

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

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

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

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

在上面的例子中,我们分别在 yield 后面定义了三个常量 a、b 和 c。当 yield 返回时,生成器会将上一个 yield 语句到当前 yield 语句之间的表达式结果作为 yield 的返回值赋值给相应的常量。在调用 generator.next() 时,可以通过参数传递值,这些值将成为上一个 yield 语句到当前 yield 语句之间的表达式结果。

也就是说,在第一个 generator.next() 调用后,a 的值将是 undefined,而在第二个 generator.next('a') 调用中,a 的值将被赋值为 'a'。

throw 和 return

Generator 函数可以使用 throw 和 return 关键字来结束执行。throw 可以向生成器抛出一个异常,而 return 则可以返回一个特定的值并结束执行。例如:

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

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

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

在上面的例子中,我们在 Generator 函数中使用 try...catch 语句来捕获异常。当 generator.next() 运行到第一个 yield 语句时,它会返回 1。但是当操作 generator.throw() 时,将向生成器抛出一个异常,并在 catch 语句中进行处理。

总结与展望

在本文中,我们介绍了 ES6 中 yield 的基本用法及示例以及可能遇到的问题和解决方案。使用 yield 可以使我们更好地编写协程和异步编程代码,并使其更易于维护和理解。理解和运用这些特性,在提高代码效率和可维护性方面必将发挥重要作用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651d33bd95b1f8cacd4ba897

纠错
反馈