首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么原生javascript数组forEach方法比标准的for循环慢很多?

为什么原生javascript数组forEach方法比标准的for循环慢很多?
EN

Stack Overflow用户
提问于 2014-03-04 03:14:59
回答 2查看 4.5K关注 0票数 20

在阅读Quintus game engine的源代码时,我发现它们大量使用for循环,而不是本机forEach。

我最初的想法是原生forEach方法会比循环的标准方法稍微快一点。然而,在用these benchmarks测试了我的理论之后,for循环结构似乎要快得多。

在四处打探之后,我似乎找不到引擎盖下面发生了什么。有没有人知道造成这种巨大差异的原因?

编辑:明确地说,我问的是“为什么”是这种情况。我不是在问“哪个更快”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-04 03:24:22

forEach在内部包含许多检查,并不像简单的循环那样直接。

有关详细信息,请参阅the Mozilla Javascript reference

代码语言:javascript
复制
if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisArg */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++)
    {
      if (i in t)
        fun.call(thisArg, t[i], i, t);
    }
  };
}
票数 21
EN

Stack Overflow用户

发布于 2017-05-09 07:12:46

感谢您粘贴实现;答案就在这里:fun.callfun慢,而且i in t测试成本很高。

似乎已经如此努力地解决不常见的情况,以至于最终的结果对于普通用户来说太昂贵了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22155280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档