在 ECMAScript 2018 中,yield 操作符被引入并成为了一个重要的特性。使用 yield 操作符,我们可以轻松实现自定义迭代器,使得代码更加简洁、易于维护。
yield 操作符简介
yield 操作符可以将一个函数转换为一个可迭代的对象,同时可以在每次迭代中返回一个值。当函数被调用时,执行到 yield 操作符时会将当前状态保存下来,等到下一次迭代时继续执行。
yield 操作符通常用于生成器函数中,生成器函数是一种特殊的函数,它可以通过 yield 操作符将函数的执行过程分割成多个阶段,从而实现迭代器的功能。
实现自定义迭代器
通过 yield 操作符,我们可以轻松实现自定义迭代器。下面是一个简单的示例代码:
-- -------------------- ---- ------- --------- ----------- - --- - - -- - - -- ----- ------ - ----- -- --- -- - --- - - --- - - ----- --- - ------------ --- ---- - - -- - - --- ---- - ------------------------------ -
在上面的代码中,我们定义了一个 fibonacci 函数,它是一个生成器函数。在 while 循环中,我们使用 yield 操作符返回当前的斐波那契数列的值。
通过 const fib = fibonacci(),我们创建了一个迭代器对象 fib,然后使用 for 循环迭代 10 次,每次调用 fib.next().value 获取下一个斐波那契数列的值并打印出来。
yield* 操作符
除了 yield 操作符之外,ECMAScript 2018 还引入了 yield* 操作符。yield* 操作符可以将一个可迭代的对象转换为一个生成器函数。
下面是一个简单的示例代码:
-- -------------------- ---- ------- --------- ----- - ----- -- ----- -- - --------- ----- - ------ ------ ----- -- - --- ---- - -- ------ - --------------- -
在上面的代码中,我们定义了两个生成器函数 foo 和 bar。在 bar 函数中,我们使用 yield* 操作符将 foo 函数转换为一个生成器函数,并在后面添加了一个 yield 3 语句。
最后,我们使用 for 循环迭代 bar 函数的返回值并打印出来。运行上面的代码,输出结果为:
1 2 3
总结
通过使用 yield 操作符和 yield* 操作符,我们可以轻松实现自定义迭代器,使得代码更加简洁、易于维护。在实际开发中,我们可以根据需要使用生成器函数和迭代器对象,从而更好地组织和管理代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65f2e70c2b3ccec22fb7dcb2