采用同步回调作为参数的一些内置方法提供了什么优势?

  • 本文关键字:方法 内置 回调 同步 参数 javascript
  • 更新时间 :
  • 英文 :


我试图彻底理解回调,这是基本缺失的部分。我在网上搜索了这个答案,但大多数都只是谈论异步回调。

Q 1:为什么像Array.prototype.forEach()这样的内置方法使用synchronous callbacks?这个特性提供了什么优势?

Q 2:当实现我们自己的自定义方法时,我们如何决定是时候使用同步回调了?

背景:

在谈论数组时,javascript的for of循环在功能上与forEach()循环完全相同。它们都是从数组的前面循环到末尾。那么,我们为什么两者都需要呢?

总的来说,我看到两个明显的区别是:

  1. for of循环可以遍历任何可迭代对象,forEach是针对数组的。
  2. for of循环允许我们使用continuebreak关键字,forEach()不
  3. for of循环不使用回调,forEach()使用synchronous callback

我明白第一点和第二点的重要性,但我不明白第三点

Q: forEach()以synchronous回调作为参数提供了什么优势?

除了"它允许我们对每个元素应用一个函数"之外的答案;或者允许我们"抽象出逻辑"会很有帮助,除非答案实际上就是这么明显,我想得太多了。

希望我的问题是明确和超级清晰的

回调本身并不是同步或异步的。回调函数只是一个函数,作为另一个函数的参数。

当回调被调用时,由函数决定,通常在之前会有其他事件。如果该事件本身是异步的,那么调用也是异步的。

这与forEachfor完全分开。两者存在的原因,可能是下列因素的结合:

  • for(.. of ..)已经不存在很长一段时间了,for(.. in ..)有一些与原型相关的令人惊讶的行为。这导致许多库实现了功能(for)each,最著名的是jQuery。
  • 人们喜欢jQueryeach的另一个jQuery时代的原因是,很多人对变量在作用域/闭包和循环中的行为感到困惑。做一个函数式的版本,可以更容易地避免在之前的迭代中覆盖闭包变量。
  • 最后,有些人喜欢使用循环函数的想法。

特别是前两个原因使$.each流行,以至于在语言中添加了本地forEach

今天使用forEach的理由更少了,因为:

  • forEachawait不兼容
  • 我们现在有块作用域letconst,所以每次循环迭代后变量覆盖不再是一个问题。
  • for(... of ..)做人们期望的(不需要hasOwnProperty)。
  • 你不能"打破"forEach

如果上面的子弹不是一个问题,一些人仍然选择使用forEach。我不完全明白,但是你真的不能争论风格。

相关内容

  • 没有找到相关文章

最新更新