Generator 函数在 ES6 中被引入,可以方便地控制程序的执行流程。ES12 中,Generator 函数有了新的功能,下面我们来详细介绍一下。
1. yield*
表达式
在 Generator 函数中使用 yield
可以将程序的执行流程暂停,并返回一个值,或者将函数传递给另一个函数进行处理。ES12 中 yield*
表达式允许我们将程序的执行流程传递给另一个 Generator 函数,并可以通过传递参数的方式控制代码执行流程。
下面是一个示例代码:
-- -------------------- ---- ------- --------- ----- - ----- -------- ----- -------- - --------- ----- - ------ ------ ----- ---- - --- ------ --- -- ------ - ----------------- - -- ------- ----- ----- -展开代码
上面的代码中,bar
函数使用了 yield*
表达式,将程序的执行流程传递给了 foo
函数,然后再返回执行到 bar
函数。这个例子比较简单,但是在实际的开发中,我们可以使用 yield*
表达式将程序的执行流程传递给更多的函数,从而实现更加复杂的控制流程。
2. yield
表达式的返回值
在 Generator 函数中,我们可以使用 yield
表达式返回一个值,在 ES12 中,我们可以通过 .return(value)
方法来提前结束函数并返回一个值。同时,在使用 yield
表达式返回一个值时,我们也可以使用 .next(value)
方法来向生成器函数中传递参数。
一个示例代码如下:
-- -------------------- ---- ------- --------- ----- - ----- - - ----- -- ----- - - ----- - - -- ------ -- - ----- --------- - ------ ------------------------------ ------------------------------- --------------------------------- -- ------- - ------ -- ----- ----- - -- ------- - ------ -- ----- ----- - -- ------- - ------ -- ----- ---- -展开代码
上面的代码中,我们使用了 .return()
方法在第二次执行 yield
语句之前,提前结束了函数,并返回了一个值。
3. next
方法的返回值
在 ES12 中,我们还可以通过 .next()
方法获得 Generator 函数最后一次执行的返回值。这个功能很方便,可以减少代码的复杂度,从而提高代码的可读性。
下面是一个示例代码:
-- -------------------- ---- ------- --------- ----- - ----- -- ----- -- ------ -- - ----- --------- - ------ ------------------------------------ -- ------- - ------------------------------------ -- ------- - ------------------------------------ -- ------- - ------------------------------------ -- ------- ---------展开代码
总结
在 ES12 中,Generator 函数有了新的功能,包括 yield*
表达式、yield
表达式的返回值和 .next()
方法的返回值。这些新功能可以提高程序处理流程的灵活性、代码的可读性和可维护性,所以我们要多加深入学习和掌握使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649d151248841e98949cd179