Javascript 铬在循环中的奇怪行为

Javascript 铬在循环中的奇怪行为,javascript,performance,google-chrome,scope,comparison,Javascript,Performance,Google Chrome,Scope,Comparison,在包装函数中运行in-cycle时,我遇到了Chrome的一个奇怪行为 比如说,我们有一个目标: obj = { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }; 本规范的执行: var sum = 0; for (var val in obj) { sum += obj[val]; } 比调用此函数慢两倍: function sumObj(obj) { var sum = 0; for (var val in obj) { sum += obj[val

在包装函数中运行in-cycle时,我遇到了Chrome的一个奇怪行为

比如说,我们有一个目标:

obj = { 'a': 1, 'b': 2, 'c': 3, 'd': 4 };
本规范的执行:

var sum = 0;
for (var val in obj) {
  sum += obj[val];
}
比调用此函数慢两倍:

function sumObj(obj) {
  var sum = 0;
  for (var val in obj) {
    sum += obj[val];
  }
}
比如:

Edge浏览器和Firefox浏览器同等处理此代码

为什么Chrome处理函数调用比直接处理内部代码更快


您可以找到性能测试。

有趣的问题。我认为这一定与
v8
引擎的实现有关。实际上,从我的角度来看,性能应该没有任何差异。记住在使用
for in
时,要包括
hasOwnProperty
检查,这是为了过滤掉任何继承的、特定于引擎的ofc,但可能是因为该函数是一个可优化的单元,而另一个代码只是在全局范围的汤。@AlexK。看起来很可能,我想Chrome可能会优化这个功能,因为它被调用的频率会更高,但一段全局代码可能只运行一次。此外,您不应该在全局范围内编写这样的代码。不过,这是一个有趣的观察结果。
sumObj(obj);