zoukankan      html  css  js  c++  java
  • for in 实验出的小机制

    那么问题来了,为什么第二次遍历时,能打印出来c,却不能打出来c的内容呢?

    A同学辩解:如果第一次循环o被a覆盖了,那么现在循环条件里的o应该指的a吧,所以c被打印出来都不应该呢?

    B同学:o只是被覆盖了。

    A同学继续辩解:但是o有两个对象,如果循环时o被覆盖,是不可能打印出来c的。

    B同学:所以只能说for in循环一开始就把o分解了,自个存好,自个等待运行。

    C同学有点不耐烦:行了,咱们再做做实验吧。

    A同学有点小落寞:o都没了还能打印,看来确实是执行了两次。

    C同学安慰:别急,干脆看看for循环的条件。

    B同学:看来for循环时,一旦arr1.length=0,循环立即终止,说明for循环每次遍历,都对arr1.length进行了重新判断 。

    B同学见大家沉默:这能否说明for in循环里,循环的次数在刚开始循环的时候就判定了,一旦循环开始,for in循环次数不受其他因素影响。

    A同学终于开口:你是说,for in循环只在初始的时候对Object进行判定 。对,这两个循环机制本来就不一样。

    C同学:也就是说,for in一开始,就把所有的属性都给存起来了,并且确定好循环次数;那么在第二次循环的时候,还是能打印出来c,但是此时o已经被a:{b:1}覆盖了,a里面是没有c这个属性的,所以能打印出来c的内容才怪嘞。

    D同学:还是感觉不对,再做个小实验看看吧。

    D同学:然后打印的话,外层循环进来的时候存一下o就行了,不影响循环,但也可以取值。

    B同学:这是个双层循环,外层循环进来,内层循环执行到第二次,o是undefined了,外层循环执行一次,不会有第二次了。

    二师弟说:你怎么看呢?

     

  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/miniSkytrue/p/12333488.html
Copyright © 2011-2022 走看看