讲解下for循环的用法,加深记忆
引子

这是一段很简单的代码,但是即便是这么简单的东西,这里我们还是需要说一下。
关于for循环整个执行流程就是,先执行var i=10,然后到了第二个语句,判断10是否大于0,很明显为true,所以此时执行for里面的循环语句,执行完毕之后再执行第三个语句,i--。由于这里的第三个语句是最后一个执行,所以此处无论是写i--还是--i都是一样的。输出结果如下。

有10,但是没有0,因为输出1的时候,i--此时i=0,判断语句0>0为false所以跳出了循环。
深入

这时候,我们用的不再是那么简单了。细分一下这个for循环,其实不同的地方就是中间的条件判断由常见的的i>0,变成了i,其实有没有发现,所谓的i>0本身就有点类似于if(i>0),这样的语句,只有当输出为true时才执行for下面的循环,所以此处的i条件其实差不多也是这样的if(i),再具体化一点就是if(i==true),那么这个if什么时候才是false呢,js基础好点的都知道,当i是0或者undefined以及null的时候这个判断就变成false,也即是我们的for循环,只有当i==0时才会跳出,所以输出结果如下:

正文
接下来就到了我们的正文部分,讲解下for循环的倒序法,代码再进一步优化

第三个语句直接合并到了第二个语句中。有了第二个例子的经验,这里我们也是同样的分析,i--变成了if(i--),所以这次的过程就是,先定义i=10,然后if(10),判断结束后10--,所以第一个输出的应该是9。
接下来的过程也是一样,先判断,然后--,一直输出到0。所以结果如下

扩展
这里,我们再把代码改一下,i--变成--i,也就是这样

那么这次的流程应该是这样,先是10--变成了9,然后if(9),这个时候输出的第一个值就是9,然后一直循环,直到i=1的时候,此时先1--变成了0,然后if(0)跳出循环,所以这次的输出并没有0,结果如下

性能
从性能上来说,这种倒序法的效率是比正常的for循环还要快的,至于它的原因我也是刚刚得知,是一个博主在回复我的评论的时候说到的,我也是挺同意他的说法。
因为倒序循环每个控制条件只是简单地与零进行比较。控制条件与true 值进行比较,任何非零数字自动强制转换为true,而零等同于false。控制条件已经从两次比较(迭代少于总数吗?它等于true 吗?)减少到一次比较(它等于true 吗?)。将每个迭代中两次比较减少到一次可以大幅度提高循环速度。
也就是说,使用倒序循环,使得原本的i<10这种需要迭代,同时迭代后还要判断,加起来共两次的比较变成了只是简单的判断true、false的一次比较,所以从性能上优化了原本的正常写法。
讲解下for循环的用法,加深记忆的更多相关文章
- if continue的用法(跳过本次循环,执行下一个循环)
Python continue 语句跳出本次循环 当需要跳过本次循环的时候,使用continue能跳过本次循环,直接下一个循环 如下脚本: for url in alllink: if url == ...
- js 递归下的循环
的递归下的循环不能使用forEach 可以使用for代替 错误写法 // 获取完整名字 var getFullName = function(code, resultName) { if (code ...
- XP/Win7下QTP11循环试用30天的破解方法
XP/Win7下QTP11循环试用30天的破解方法. XP下:1.找到以下路径:C:\Documents and Settings\All Users\Application Data\SafeNet ...
- CentOS7下Firewall防火墙配置用法详解
官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide ...
- 神奇的输入 while(cin>>....)如何在遇见换行之后进入下一层循环读入
cin>>m>>n; ;i<=m;i++) { ; char ch=' '; ) //在遇到换行之后进入下一层循环读入. { x++; cin>>c[x]; ...
- linux下find查找命令用法
Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...
- bash 编程中循环语句用法
1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...
- sql 游标 跳出循环 和进入下一个循环
1 使用break 结束整个循环. 2 使用continue 结束当前循环,进入下已循环. 注意:使用continue造成死循环,是因为continue后又执行与上次相同的fetch了. 解决办法 ...
- 理解 ARC 下的循环引用
本文由 伯乐在线 - nathanw 翻译,dopcn 校稿.未经许可,禁止转载!英文出处:digitalleaves.com.欢迎加入翻译组. ARC 下的循环引用类似于日本的 B 级恐怖片.当你刚 ...
随机推荐
- 1245 - Harmonic Number (II)(规律题)
1245 - Harmonic Number (II) PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 3 ...
- android自定义控件 onMeasure() 测量尺寸
上次讲的自定义控件刷新点屏幕的任意地方都会刷新,而且在xml里自定义控件下面放一个textview的话,这个TextView是显示不出来的,不只这个,以前的几个自定义控件都是 为什么呢?今天来讲下on ...
- BZOJ 2654: tree( 二分 + MST )
我们给白色的边增加权值 , 则选到的白色边就会变多 , 因此可以二分一下. 不过这道题有点小坑... ------------------------------------------------- ...
- java.lang.NoClassDefFoundError: org.ksoap2.transport.HttpTransportSE异常处理
原因就是没有打包进去 因为引用进去 编译时没出出现问题 解决如下
- 【转】lnmp_auto:自动化安装lnmp环境脚本
原文链接: lnmp_auto:自动化安装lnmp环境脚本 这哥们整理的这篇博文很好 转载分享 博文转载如下: 源代码在github上:https://github.com/jianfengye/ ...
- Week5(10月10日):国庆之后,让我们整装期待元旦吧
Part I:提问 =========================== 1.要将“Hello, Admin",从控制器传递到视图,该如何操作? (1)使用ViewData (2)使用V ...
- Week7(10月24日)
Part I:提问 =========================== 1.数据验证属性的练习. 按要求写出教室和课程的模型类. (1)教室类主键不自动增值,手工输入. (2)教室名字不超过10 ...
- 浏览器hack总结 详细的浏览器兼容性解决方法
由于各浏览器对页面的解析不同,会导致页面在不同浏览器中显示的样式不一致,为了保持页面的统一,经常需要对浏览器进行兼容性问题的调试. CSS Hack 面对浏览器诸多的兼容性问题,经常需要通过CSS样式 ...
- W3C 、HTML 、CSS 发展介绍
一.W3C W3C 指万维网联盟(World Wide Web Consortium),创建于1994年10月,由 Tim Berners-Lee (他是html的发明人)创建. W3C开始被创建的目 ...
- 引用 xp系统引导修复(转载)
引用 3592wangxiaoxi 的 xp系统引导修复(转载) 原文来自百度知道a12424106关于“急需xp系统引导方面的知识!”的回复. XP系统的引导过程 如果想学习排除计算机系统故障,首先 ...