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了,外层循环执行一次,不会有第二次了。

    二师弟说:你怎么看呢?

     

  • 相关阅读:
    验证LeetCode Surrounded Regions 包围区域的DFS方法
    Qt Package Project 打包发布程序
    [LeetCode] Missing Number 丢失的数字
    [CareerCup] 6.4 Blue Eyes People on Island 岛上的蓝眼人
    [CareerCup] 6.3 Water Jug 水罐问题
    [CareerCup] 6.2 Dominos on Chess Board 棋盘上的多米诺
    [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
    [CareerCup] 5.8 Draw Horizonatal Line 画横线
    Print or Cout an Unsigned Char Variable 打印无符号字符
    Kinect 学习链接
  • 原文地址:https://www.cnblogs.com/miniSkytrue/p/12333488.html
Copyright © 2011-2022 走看看