javascript - 循环中javascript中函数声明与函数表达式的性能

标签 javascript performance

在以下jsperf中:http://jsperf.com/defined-function-vs-in-loop-function/3

你会注意到这段代码:

for (var i = 0; i < loops; i++) {
   function func(a, b) {
    return a + b;
  };
  func(i, i);
}

与此代码的性能相当:

function declaredFn(a, b) {
    return a + b;
};


for (i = 0; i < loops; i++) {
    declaredFni, i);
}

但是这段代码:

for (i = 0; i < loops; i++) {
  var func = function(a, b) {
    return a + b;
  };
  func(i, i);
}

比这段代码慢得多:

var expfunc = function(a, b) {
  return a + b;
};
for (i = 0; i < loops; i++) {  
  expfunc(i, i);
}

为什么?内部发生了什么?

最佳答案

如果您使用 function fn() {} 声明定义一个函数,它会被提升到顶部。因此,这段代码:

for (var i = 0; i < loops; i++) {
   function func(a, b) {
    return a + b;
  };
  func(i, i);
}

完全等同于这段代码:

function declaredFn(a, b) { return a + b; };

for (i = 0; i < loops; i++) { declaredFn(i, i); }

因为 function 声明被提升到顶部。

但是,var fn = function() {} 表达式不会被提升,因此您最终需要在每个循环中重新定义函数。

参见 this answer了解更多信息。

关于javascript - 循环中javascript中函数声明与函数表达式的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26705170/

相关文章:

javascript - 奇怪的重定向错误

java - Hazelcast 执行速度较慢

mysql - 增加WHERE子句的条件会提高搜索速度吗?

python - 将滑动窗口设置为多维数组中的列(来自 MATLAB 的 IM2COL) - Python

javascript - 单击按钮时变量未更新?

Javascript/JSON : Swap items in array

javascript - 动态加载的图像用作包含 div 的背景

javascript - 从 html 字符串中删除样式

java - 不同操作系统上的 JVM 性能差异

java - 处理多个插入的最佳方法