我试图读取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
。我无法理解这种行为。当我引入一个新变量时,为什么会得到不同的(意外的)结果?
答案 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'
我还修复了代码中的一些小错字,例如缺少分号等。