这是代码
示例 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 会更有效吗?
这是代码
示例 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.length 被调用一次。就像 k = 0
两者完全一样,没有区别。
相同的代码,使用第二个代码以提高可读性
我对这里给出的答案感到惊讶。
示例 1 是许多书籍和文章中提到的众所周知的反模式。它在每个循环中重新计算 l。根据您在 for-call 中放置的这个(或任何其他不必要的)操作的成本(第一个参数除外),代码可能需要更长的时间来执行。
示例 2 更好,因为 的值l
只计算一次并被缓存。缓存是一个非常重要的概念,这个简单的例子演示了它。即使您value
在循环内部进行更改,它也会起作用,而第一个示例可能会导致意外结果。
在我看来,使用示例 1 的唯一可能原因是当您确实需要为每个循环重新计算l
时,例如当循环更改value
并且您确实想要更新时l
。