Javascript 铬在循环中的奇怪行为
在包装函数中运行in-cycle时,我遇到了Chrome的一个奇怪行为 比如说,我们有一个目标: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
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);