• 讲解下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的一次比较,所以从性能上优化了原本的正常写法。

  • 相关阅读:
    通过 SingleFlight 模式学习 Go 并发编程
    进程内优雅管理多个服务
    20192406梁健 202120222 《网络与系统攻防技术》实验四实验报告
    20192406梁健 202120222 《网络与系统攻防技术》实验五实验报告
    oracle存储过程迁移到PostgreSQL之问题总结
    frida 获取app里所有调用 java.lang.String的值
    firad 绕过ssl
    python frida 安装
    mitmproxy 夜神系统级证书
    MultiEntity AspectBased Sentiment Analysis with Context, Entity and Aspect Memory论文翻译
  • 原文地址:https://www.cnblogs.com/jelly7723/p/5535149.html
Copyright © 2020-2023  润新知