This question already has answers here:
Do modern JavaScript JITers need array-length caching in loops?

(3 个回答)


7年前关闭。




我在 Ember.js 中看到了这个片段:
  for (var i=0, l=deps.length; i<l; i++) {
    if (deps[i] === 'exports') {
      reified.push(exports = {});
    } else {
      reified.push(requireModule(resolve(deps[i])));
    }
  }

请看一下 var i=0, l=deps.length; i<l; i++deps 的长度是在循环之前定义的。我想知道为什么他们必须这样做而不是只使用 var i=0; i<deps.length; i++ 。我想这可能是一个“性能技巧”,所以我决定对 jsperf 进行测试:

http://jsperf.com/predefined-length-vs-inline-defined-length

结果表明,第二个更快。所以他们使用第一个肯定有另一个原因。

任何人有任何想法?非常感谢。

最佳答案

这与其说是一个小的性能优化,不如说是一个好的实践。在非常大的阵列中,它将产生显着的性能改进。这样做的原因是它“缓存”了数组、NodeList 等的长度值,以便在循环的退出条件下,您不必每次都重新访问该属性,因为它存储在变量中.

与任何代码一样,性能提升会有所不同,并且可能会更快或更慢,具体取决于浏览器。

关于javascript - 在循环之前定义数组长度是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24352570/

10-14 17:36