代码之家  ›  专栏  ›  技术社区  ›  Hari Krishna

属性的迭代进入无限循环

  •  2
  • Hari Krishna  · 技术社区  · 6 年前

    var employee = {
      "firstName" : "Krishna",
      "lastName" : "Majety",
      "age" : 29,
      "address" : {
        "city" : "Bangalore",
        "area" : "Marthalli"
      }
    }
    
    
    function printProperties(object, objectName, tab){
      var props = Object.keys(object);
    
      for(i = 0; i < props.length; i++){
        property = props[i];
    
        if(object[property] instanceof Object){
          printProperties(object[property], objectName+"."+property, "  " + tab);
        }else{
           console.log(tab + objectName + "." + property + " => " + object[property]); 
        }
      }
    }
    
    printProperties(employee, "employee", "")
    

    如果有人能解释这种行为的原因,那就太好了。

    1 回复  |  直到 6 年前
        1
  •  2
  •   tehhowch    6 年前

    循环迭代器和属性变量是全局范围的,因此嵌套对象将重置它们。解决办法是扩大范围 let var ,或使用类似 forEach 完全跳过迭代器。

    for (let i = 0; ...
      let property = props[i];