为什么for循环中的箭头函数比全局函数更快?

时间:2018-04-17 13:43:00

标签: javascript performance function loops arrow-functions

我想测试在for循环中使用箭头函数是否比使用全局函数慢得多。令我惊讶的是,在所有经过测试的浏览器(Chrome,Edge,Firefox)中,for循环中的箭头函数比全局函数快5-10倍。

我创建了一个jsperf here

这是最初的循环:

  for(let i = 0; i <= N; ++i) {
     (i) => sum += i;
     (sum, i) => sum += i;
  }

以下我认为应该更快:

   for(let i = 0; i <= N; ++i) {
      add(i);
      addTwo(sum, i);
   }

添加函数只是全局函数:

  function add(i) {
     return sum += i;
  }
  function addTwo(sum, i) {
     return sum += i;
  }

不应该重复使用全局函数比在每次迭代时创建箭头函数更快吗?

LE 测试代码错了,我实际上并没有调用箭头函数,现在我将其更新为:

   for(let i = 0; i <= N; ++i) {
      ((i) => sum += arr[i])();
      ((sum, i) => sum += arr[i])();
   }

现在看来,正如预期的那样,全局函数方法现在更快(在Chrome上为x2,在Firefox上为x300,在Edge上为x20)。

1 个答案:

答案 0 :(得分:0)

你不会创造一个新的&#34;每次迭代时的箭头功能。当js解析你的脚本时,该函数被设置一次,它只会在每次迭代时创建一个闭包。但是当你不调用函数时,根本不需要闭包,你的for循环什么都不做,因此速度很快。