这个FOR循环有电池循环次数什么意思思

for循环从大往小循环真的更加好吗?
15:33:36 +08:00 · 6487 次点击
我的sublime text3,安装了emmet。输入for时会有自动完成,一共2中//这种他叫“改进型内置for循环”for (var i = Things.length - 1; i &= 0; i--) { Things[i]};for (var i = 0; i & Things. i++) { Things[i]};第一种和第二种在我眼中无非是顺序的区别,请问第一种真的比第二种好吗?
25 回复 &| &直到
08:00:00 +08:00
& & 15:36:45 +08:00
区别在于 .length ,第一种不会比第二种差,这个理由足够吗?
& & 15:36:46 +08:00 via iPhone
容易发现的一点是.length不用每次都去计算这点好,其它的请楼下讲讲
& & 15:37:06 +08:00
真的好。访问0比访问Things.length快多了。第一种只访问了一次,第二种循环几次就放问了几次。
但是,现在这个时代,再加上会问出这种问题的你所在的编程环境,我觉得真没必要抠这点效率。
我一般都会写第二种,实在觉得慢,就加一个临时变量缓存下length的值。
& & 15:37:26 +08:00
dom 元素 collection 的时候每个 length 都要重新遍历容器的……
& & 15:40:01 +08:00
第一种只有初始化var i= Things.length的时候读取Things.length。
第二种每跑一个循环都有要做i & Things.length的判断,每次都要读取Things.length,效率略低一点。
估计是这个区别。
& & 15:40:08 +08:00
还有,我个人会用for each 以及 for each in。
其实就是老子高兴用哪个用哪个啦。
& & 16:02:25 +08:00
我觉得楼主可能会喜欢这个:http://jsperf.com/fors-vs-while/10 ,js中各种循环方式的测速。
& & 16:57:22 +08:00
除去不用每次调用.length外(其实这个的实际影响应该很小吧)
在某些情况下,比如Things是个链表,而你要在循环过程中删除Things中的部分元素,从小到大就会出错,而从大到小不会
& & 17:12:51 +08:00
其实编译器应该吧第二种的length优化到外面去
& & 17:51:55 +08:00
速度差很多.
& & 17:53:50 +08:00 via iPad
这要是在c语言上又会牵扯出等于0判断与等于某值判断速度快慢,volatile关键字,乃至编译器优化的问题
& & 18:02:12 +08:00
Naive. What if array got modified in loop?
& & 18:03:30 +08:00
@ 除非编译器能确定length不会变,否则不可能做这样的优化
& & 18:12:23 +08:00
犀牛书里面有讲过这个问题,实际上数组的长度是由最后一个不为undefined的元素位置决定的,所以:
1、计算length很低效,别忘了这是循环,效率差异会被放大
2、遍历的过程中,数组的长度是可能变化的。估计解释器不会在这里优化。
& & 18:21:18 +08:00
我更喜欢这样:
for (var i = 0, n = things. i & ...
& & 20:08:50 +08:00
Caching length 有个问题就是如果 array 可能在 loop 中 length 改变就不适用了.
& & 20:14:20 +08:00
其实 Things.length 是取length这个属性的get方法。这个方法是需要耗时的。
& & 21:30:29 +08:00
换在二十年前是会快
& & 22:09:18 +08:00
第一反应是Cache DRAM的机制……
抬头一看JavaScript……那应该是Length的判断机制更重要
& & 01:24:08 +08:00
效率最高的竟然是会破坏数据的 pop 和 shift!
有比较了解的能讲一下吗?
& & 01:54:43 +08:00
@
for (var i = Things.length - 1; i &= 0; i--) 这种写法也不能处理length在loop里被改变的情况吧
& & 21:40:18 +08:00 via iPhone
for(var i=Things.i;i--){
Things[i]
}
这种会快一点吗?
& & 02:09:43 +08:00 via Android
不考虑数组长度变化的情况,第一种肯定更快。不用每次都获取长度,和0比大小是最快的。但是对于js而言,不同的引擎或许有不同的解释方法。
如果只考虑纯粹的数组,可能感觉不到效率差异,但是如果循环内部有dom操作,效率差异会大很多。
& & 02:18:51 +08:00 via Android
@ 刚才我回复的第二段自己回头看都迷糊了。。当我没说。。晚睡伤脑。。
& & 00:16:25 +08:00
大部分情况下,你在每个循环内所做的具体事情(操作数组或是DOM)花费的时间远远大于执行循环本身花费的时间。这种优化在实际应用中是难以量化的,除非你写的是效率要求特别高的底层基础架构,否则不必太过纠结。
& · & 763 人在线 & 最高记录 3541 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 16ms · UTC 23:25 · PVG 07:25 · LAX 16:25 · JFK 19:25? Do have faith in what you're doing.这个for循环什么意思?【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:707,986贴子:
这个for循环什么意思?收藏
private List&Mail& convert(List&File& xmlFiles, MailContext ctx) {&&&&&&&& List&Mail& result = new ArrayList&Mail&();&&&&&&&& for (File file : xmlFiles)&&&&
{&&&&&&&&&&&&&&&&&&&&&&& Mail mail = FileUtil.fromXML(ctx, file);&&&&&&&&&&&& result.add(mail);&&&&&&&& }&&&&&&&& sort(result);&&&&&&&& 我不明白"for (File file : xmlFiles)"
括号里什么意思?
遍历所有的file文件
对xmlfiles
登录百度帐号for循环后面有个;是什么意思_百度知道
for循环后面有个;是什么意思
int i,j,x=0;
for(i=0;i&2;i++)
for(j=0;j&=3;j++)
printf(&x=%d\n&,x);
int i,j,x=0;
for(i=0;i&2;i++);
for(j=0;j&=3;j++)
我有更好的答案
    for循环中的&参数初始化表达式&、&条件表达式&和&更新循环变量表达式&都是选择项, 即可以缺省, 但&;&不能缺省。省略了初始化, 表示不对循环控制变量赋初值。 省略了条件表达式, 则不做其它处理时便成为死循环。省略了增量, 则不对循环控制变量进行操作, 这时可在语句体中加入修改循环控制变量的语句。 for循环的三个表达式都是逗号表达式,也就是说每个表达式可以由几个表达式构成,中间用&,”隔开。  for循环编程语言中的语句之一,用于循环执行。for循环是开界的,它的一般形式为: for(; &条件表达式&; ) 语句; 初始化总是一个赋值语句, 它用来给循环控制变量赋初值; 条件表达式是一个关系表达式, 它决定什么时候退出循环; 增量定义循环控制变量每循环一次后 按什么方式变化。这三个部分之间用&;&分开。 例如:for(i=1; i&=10; i++) 语句; 上例中先给i赋初值1, 判断i是否小于等于10, 若是则执行语句, 之后值增 加1。再重新判断, 直到条件为假, 即i&10时, 结束循环。  for语句比while语句和do-while都要灵活,是一种功能更大、更常用的循环语句,它的一般语法格式为:  for(表达式1;表达式2;表达式3)  {  循环体  }  其中,表示式可以省略,但是分号不可省略。
采纳率:53%
来自团队:
上机操作你会发现,第一种输出结果x=8而第二种输出结果x=4!产生这两种不同结果的原因在于,第一个程序,for后没有;所以其下面的大括号中的内容执行两次,而第二个程序for语句执行空操作,下面的大括号里的内容并不与它发生直接关系,下面括号中的内容只是程序顺序执行,被执行了一次!
此处的分号的产生我认为有两种原因,一种是无意加上的,也就是错误操作所致,另一种是有意加上的,可以在以后编程的过程中加上想加的内容!
此题我认为是无意中发生的错误操作,因为这么小的程序,想加的内容早就加上了!还有一种可能就是出题人想给你提供一种思路,在未来编写大的程序时,可以流出空余,为补充程序用
希望你能理解
本回答被提问者和网友采纳
for(i = 0;i&2;i++);实际for循环下面大括号里的语句只执行一次,for语句只执行了两次空操作
for(i = 0;i&2;i++);实际for循环下面大括号里的语句只执行一次,for语句只执行了两次空操作
for 头括号里的2个分号代表2个表达式语句,写法很自由你可以这样写#include &stdio.h&int main(){for(printf(&语句1&);printf(&语句2&);){} return 0;};
for(i = 0;i&2;i++);i=0 是循环初值i&2 是循环条件i++ 是循环的递增量
表示循环执行这个空语句,CPU空转。
其他5条回答
为您推荐:
其他类似问题
您可能关注的内容
for循环的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。已解决问题
C语言 里面的FOR是什么意思
浏览次数:3313
用手机阿里扫一扫
最满意答案
for&循环&for&(j=0;j&5;j++)以这个为例for循环中有两个分号,将()中分为3部分i=0;j&5;j++这三个部分j=0是起始值,j&5是循环条件,成立继续循环,j++是继续执行顺序i=0(只执行开始一次);j&5;如果成立执行循环体printf(&%c&,a[i][j]);然后是j++,再然后&j&5,成立执行printf(&%c&,a[i][j]);&&j++....
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is okjs中的for in循环和for循环有什么区别-js教程-PHP中文网QQ群微信公众号还没有收藏js中的for in循环和for循环有什么区别JavaScript for...in 语句for...in 语句用于对数组或者对象的属性进行循环操作。for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。Tip:for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。·语法:for (变量 in 对象)
在此执行代码}“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。实例:使用 for ... in 循环遍历数组。&html&&body&&script type=&text/javascript&&var x
var mycars = new Array()
mycars[0] = &Saab&
mycars[1] = &Volvo&
mycars[2] = &BMW&
for (x in mycars)
document.write(mycars[x] + &&br /&&)
}&/script&&/body&&/html&注意一:for in循环不会按照属性的下标来排列输出。//code from &first&:&first&,
&zoo&:&zoo&,
&34&:&34&,
&second&:&second&};for (var i in obj) { console.log(i); };输出:1234firstzoosecond执行时按chrome执行,先把当中的非负整数键提出来,排序好输出,然后将剩下的定义时的顺序输出。由于这个奇葩的设定,让avalon的ms-with对象排序不按预期输出了。只能强制用户不要以纯数字定义键名。实例1:在数组的原型对象上定义了一个新的属性,使用for循环没出现问题function getNewArray(){var array=[1,2,3,4,5];Array.prototype.age=13;
var result = [];for(var i=0;i&array.i++){
result.push(array[i]);
}alert(result.join(''));
}实例2:采用了for in循环,但是给我们期望的一样还是得到了12345的正确结果function getArrayTwo(){var array=[1,2,3,4,5 ];
var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}实例3:给原型添加属性之后,默认情况下枚举,最后输出1234513function getNewArrayTwo(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}所以建议不要对数组执行for in循环,事实上,在高性能javascript这本书中,也强调了for in循环的不好,因为它总是会访问该对象的原型,看下原型上是否有属性,这在无意中就给遍历增加了额外的压力。解决方法:如果某个对象具有给定名称的属性,那么Object.prototype.hasOwnProperty(name)返回true。如果该对象是从原型链中继承了该属性,或者根本没有这样的一个属性,则返回false。通过hasOwnProperty限定for in循环在当前中遍历,而不用去考虑它的原型属性。function finalArray(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];for(var i in array){if(array.hasOwnProperty(i)){
result.push(array[i]);
}alert(result.join(''));
}注意事项:1.有一部分浏览器,例如早期的safari浏览器,不支持这个方法2.对象经常被用作哈希值,这就是存在hasOwnProperty被另外的属性屏蔽的风险(但是我估计没有人那么无聊使用这个属性)以上就是js中的for in循环和for循环有什么区别的详细内容,更多请关注php中文网其它相关文章!共3篇816点赞收藏分享:.php.cn&猜你喜欢PHP中文网:独家原创,永久免费的在线,php技术学习阵地!
All Rights Reserved | 皖B2-QQ群:关注微信公众号

我要回帖

更多关于 如此循环是什么意思 的文章

 

随机推荐