Javascript for loop效率

Mis*_*hko 12 javascript

for (var i=0, cols=columns.length; i<cols; i++) { ... }
Run Code Online (Sandbox Code Playgroud)

效率更高

for (var i=0; i<columns.length; i++) { ... }
Run Code Online (Sandbox Code Playgroud)

在第二个变体中,columns.length每次i<columns.length检查条件时都会计算出来?

Pas*_*TIN 8

每个循环将评估for的第二部分中的任何表达式.

所以,在这里,你的第二个命题,是的,columns.length每次检查条件时都会计算 - 这将使第一个命题比第二个命题更快.


(对许多其他语言都是如此,顺便说一下)

  • 在Chrome和Firefox(目前都使用动态编译)中尝试过,在两者中,使用局部变量缓存`columns.length`比在循环中使用`columns.length`更快. (3认同)

Ash*_*Ash 5

像这样的微优化在Javascript之类的语言中没有多大意义,除非你已经测试并发现循环性能是一个问题.

但是,必须在每次迭代时计算columns.length,因为在循环迭代期间列数可能会更改.因此,存储循环限制可能会提供稍好的性能(但请参阅我的第一点).