在JQuery foreach上获得不同的答案

时间:2017-08-19 12:42:36

标签: javascript jquery recursion foreach

我试图读取map / jsonobject中的所有值。以下是我的函数调用,

a ={"a":{"b":"c"}}
result= test(a,'a')    
console.log(result)

功能是,

function test(jsonObj,name){

    main = ""
    if(jQuery.type(jsonObj)==='object'){
        $.each(Object.keys(jsonObj),function(){
             main += test(jsonObj[this],name+'_'+this)  
        });
   }else{
       main +=jsonObj;
   }   
   return main
}

当我执行上述脚本时,我得到一个输出c

后来我稍微修改了一下这个函数,

function test(jsonObj,name){        
    main = ""
    if(jQuery.type(jsonObj)==='object'){
        $.each(Object.keys(jsonObj),function(){
            resp = test(jsonObj[this],name+'_'+this) //this line added
            main +=resp
        });
   }else{
       main +=jsonObj;
   }   
   return main
}

现在我的输出为cccc。我无法理解这种行为。当我引入一个新变量时,为什么会得到不同的(意外的)结果?

1 个答案:

答案 0 :(得分:1)

您的变量main在全局范围内声明。因此,函数中的递归只会为其添加新结果。

通过使用var关键字声明变量,可以将其范围限制为函数

function test(jsonObj, name) {        
    var main = "";
    if (jQuery.type(jsonObj)==='object') {
        $.each(Object.keys(jsonObj),function() {
            resp = test(jsonObj[this],name+'_'+this); //this line added
            main +=resp;
        });
    } else {
        main +=jsonObj;
    }
    return main;
};

a ={"a":{"b":"c"}};
result= test(a,'a');    
console.log(result); // outputs 'c'

我还修复了代码中的一些小错字,例如缺少分号等。

相关问题