讲解下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 级恐怖片.当你刚 ...
随机推荐
- 【Hibernate】Illegal attempt to associate a collection with two open sessions
今天在用Hibernate对对象进行修改操作的时候报了这个错. 之前一直没什么错误,但是今天修改了一下表结构,增加了一个OneToMany的映射. 所以在我获取对象,重新set一个变量之后就报了这个错 ...
- java类和对象的基础(笔记)
在Java类的设计中,有时希望一个类在任何时候只能有一个实例.这时可以将该类设计为单例模式(singleton).要将一个类设计为单例模式,需要把类的构造方法的访问修饰符声明为private,然后在类 ...
- 内联函数 inline
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...
- 怎样使用windows命令行,用notepad打开某文件夹下面的所有文件
http://zhidao.baidu.com/question/2138815012359999388.html __________________________________________ ...
- BZOJ 2730: [HNOI2012]矿场搭建( tarjan )
先tarjan求出割点.. 割点把图分成了几个双连通分量..只需dfs找出即可. 然后一个bcc有>2个割点, 那么这个bcc就不用建了, 因为一定可以走到其他救援出口. 只有一个割点的bcc就 ...
- Week13(12月2日):又到了那个点,期末了~~~~
Part I:提问 =========================== 1.ASP.NET MVC是微软.NET平台上的一个( ). A.语言 B.集成开发环境 C.Web开 ...
- 【.Net基础拾遗】适配器模式(Adapter)与多态
今天晚上跟大家主要来讨论下适配器模式和多态,什么是适配器模式呢?先抛给大家一个问题:假设两个类Student和Teacher继承一个抽象基类Person,如何在不改动三类情况下实现多Student.T ...
- oschina程序开发
程序开发 102脚本编程语言 36地图相关 7Epub电子图书工具 109UI组件库 16代码生成工具 25SVG开发包 17推荐引擎 3指纹识别 23拼音转换工具包 24蓝牙开发 295GUI开发框 ...
- 基于visual Studio2013解决C语言竞赛题之0502最小数替换
题目
- nodejs--express开发个人博客(-)
写完了入门笔记,开始进入开发阶段吧.基于上一节的内容,现在着手开发个人博客系统.先划分一下功能吧 /:首页 /login:登陆 /reg:注册 /post:发表文章 /logout:退出 首先规划一下 ...