0

这是代码

示例 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 会更有效吗?

4

5 回答 5

4

它们的速度相等。没什么不同。

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

于 2013-04-25T13:14:07.387 回答
2

片段中没有效率差异。

在第一个片段中 l = value.length 被调用一次。就像 k = 0

于 2013-04-25T13:16:14.827 回答
0

两者完全一样,没有区别。

于 2013-04-25T13:14:23.170 回答
0

相同的代码,使用第二个代码以提高可读性

于 2013-07-16T18:06:53.630 回答
-1

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

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

示例 2 更好,因为 的值l只计算一次并被缓存。缓存是一个非常重要的概念,这个简单的例子演示了它。即使您value在循环内部进行更改,它也会起作用,而第一个示例可能会导致意外结果。

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

于 2013-08-29T08:55:12.157 回答