Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这些是不同的循环吗?_Javascript_For Loop - Fatal编程技术网

Javascript 这些是不同的循环吗?

Javascript 这些是不同的循环吗?,javascript,for-loop,Javascript,For Loop,这是密码 例1 for (var k = 0, l = value.length; k < l; k++, index++) { // ... } for(var k=0,l=value.length;k

这是密码

例1

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

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

在示例1中,变量l是在“for”括号内定义的,那么这是否意味着每次循环都要定义l?如果是这样,那么示例2的效率会更高,对吗?

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


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

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


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

两者完全相同,没有区别。

两者完全相同,没有区别。

片段中没有效率差异


在第一个snipet中,l=value.length被调用一次。就像k=0一样,代码片段中没有效率差异


在第一个snipet中,l=value.length被调用一次。就像k=0一样,使用第二个代码来提高可读性同样的代码,使用第二个代码来提高可读性我对这里给出的答案感到惊讶

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

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


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

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

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

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


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

“在示例1中,变量l是在‘for’括号内定义的,那么这是否意味着每次循环都要定义l?”…那么,
k
在每次迭代中定义/重置了吗?为什么不为(var k=0;kk在每次迭代中定义/重置了吗?为什么不为(var k=0;k