JavaScript中for循环的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中for循环的理解相关的知识,希望对你有一定的参考价值。
var num = 0;
for (var i = 0; i < 10; i++)
for (var j = 0; j < 10; j++)
num++;
alert(num);
var num1 = 0;
for (var i = 0; i < 10; i++)
for (var j = 0; j < 10; j++)
if (i == 5 && j == 5)
break ;
num1++;
document.write(num1 + "<br />");
为什么第一个的结果是100,为什么第二个是95,是如果理解的
break ;
主要是这个,当i=5和j=5同时成立时,就打破 for (var j = 0; j < 10; j++) 这个循环,本来正常循环num1会+多5次,分别是i=5 和j=5,j=6,j=7,j=8,j=95次,所有结果是95 参考技术B 第一个100很好理解:10*10
第二个95:10*10-(当i=5&&j=5时,遇到了break语句。那么j=5,6,7,8,9这几个都不会执行num1++了,而直接跳转到了最外层的for循环,最外层的for从i=6开始继续循环。所以少了5个)追问
请问10*10是怎么理解的
追答当第一层for循环的i=0时,进入第二层for循环。j要从0一直循环到9才会退出循环(10次)。然后第一层for循环i=1,又一次进入到第二层for循环。也就是,每一次进入第二层循环,都要循环10次。
那么,第一层循环一共要循环几次,10次。所以num=10*10,是100.
javascript中的for循环变体
【中文标题】javascript中的for循环变体【英文标题】:For loop Variations in javascript 【发布时间】:2012-04-13 23:32:03 【问题描述】:在this 网站上有一个 for 循环变体列表。我可以理解for(var i=0, len=arr.length; i<len ;i++)
循环的用法(其中arr
是一个数组),因为arr.length
不是在每一步都计算出来的,因此似乎有边际性能增益。但是,使用其他变体有什么优势?例如,像
for (var i=arr.length; i--;)
for (var i=0, each; each = arr[i]; i++)
使用不同的 for 循环变体时,性能是否有明显变化?我通常使用for(var i=0, len=arr.length; i<len ;i++)
,即使是非常大的数组。所以我只想知道我在这里是否遗漏了什么。
【问题讨论】:
“递减”循环在 js 中要快得多。至于最后一个我不会使用它,因为在 js false==0=="" . JavaScript - Are loops really faster in reverse...?的可能重复 @camus 第二个在循环时很有用,例如。 DOM 元素的集合。 这个jsperf 测试所有循环... @ManseUK +1 为 JSPerf。这是谷歌搜索“jsperf for loops”的第一个结果 【参考方案1】:人们普遍认为,一个反向的while循环
var loop = arr.length;
while( loop-- )
是类 C 语言中最快的循环类型(这也适用于 ECMAscript 很长一段时间,但我认为所有最新的引擎即使在今天的标准循环上也相当不错)。 (jsperf)
您的“变体”实际上没有变体,只是for-loop
中conditional
语句的不同用法(这实际上使它成为变体..doh!)。喜欢
1)for (var i=arr.length; i--;)
只需使用for-loop
中的条件部分来完成这两项工作,迭代并检查i
是否具有真值。只要i
变为0
,循环就会结束。
2) for (var i=0, each; each = arr[i]; i++)
这里我们从每次迭代中获取元素,所以我们可以直接在循环体中访问它。当您厌倦了总是重复arr[ n ]
时,这通常会使用。
您在循环之前缓存.length
属性方面做得很好。正如您正确提到的,它更快,因为我们不必在每次迭代中访问该属性。除此之外,在处理像HTMLCollections
这样的“活动结构”时,有时在 DOM 脚本中也需要它。
【讨论】:
【参考方案2】:关键是当你递减迭代器时,你实际上是在将它与 0 而不是长度进行比较,因为“、>= 运算符需要在左侧进行类型检查,所以速度更快和右侧的运算符来确定应该使用什么比较行为。
最快的循环是:(当然如果你不关心顺序)
var i = arr.length
while(i--)
如果您确实关心订单,那么您使用的方法就可以了。
【讨论】:
【参考方案3】:根据jsperf,JavaScript 中最快的循环类型是
var arr = new Array(10);
var i = 0;
while (i < arr.length)
arr[i];
i++;
;
就在(我的默认循环)之前
var arr = new Array(10);
for (var i = 0; i < arr.length; ++i)
arr[i];
;
这是最慢的:
var arr = new Array(10);
arr.forEach(function(x)
x;
);
至少在 OSX 10.7.3 上的 Chrome 17 上。所以看起来“默认”循环毕竟很好!!!
【讨论】:
这些 jsperf 测试非常有用。谢谢!【参考方案4】:这是对每个循环的不好使用,因为它会在错误值上失败,从而打破循环。
for (var i=0, each; each = arr[i]; i++)
我也不会使用这个循环(即使它可能会更快......)
for (var i=arr.length; i--;)
它看起来很混乱,可读性较差,你不妨写成反向while循环。
【讨论】:
以上是关于JavaScript中for循环的理解的主要内容,如果未能解决你的问题,请参考以下文章
理解 javascript 嵌套 for 循环的问题 [关闭]