这些for循环不同吗?

Are these for loops different?

本文关键字:for 循环 这些      更新时间:2023-09-26

代码

示例1

for (var k = 0, l = value.length; k < l; k++, index++) {
    // ...
}
示例2

var l = value.length;
for (var k = 0; k < l; k++, index++) {
    // ...
}

在例1中,变量l是在for括号内定义的,所以这是否意味着每次循环进行时都要定义l ?如果是这样,那么例2会更有效,对吧?

他们的速度是一样的。没有什么不同。

但我建议你使用例2,因为它更好地阅读

代码段之间没有效率差异。

第一个代码段中的

l = value。长度被调用一次。就像k = 0

两者完全相同,没有区别

相同的代码,使用第二个为可读性

我对这里给出的答案感到惊讶。

例1是许多书籍和文章中提到的一个著名的反模式。它在每个循环中重新计算l。根据在for-call(第一个参数除外)中放置的这个(或任何其他不必要的)操作的开销,代码可能需要更长的时间来执行。

示例2比较好,因为l的值只计算一次,并且被缓存。缓存是一个非常重要的概念,这个简单的示例演示了它。而且,即使在循环内更改value,它也可以工作,而第一个示例可能会导致意想不到的结果。

在我看来,使用示例1的唯一可能的原因是当你确实需要为每个循环重新计算l时,例如,当循环改变value时,你真的想更新l