无法理解嵌套javascript对象中的递归行为
我试图理解递归如何处理可能具有相同键名的嵌套js对象。例如,在下面的对象中,关键点在嵌套中是相同的。 因此,当我循环时,我希望无法理解嵌套javascript对象中的递归行为,javascript,recursion,Javascript,Recursion,我试图理解递归如何处理可能具有相同键名的嵌套js对象。例如,在下面的对象中,关键点在嵌套中是相同的。 因此,当我循环时,我希望obj[keys]始终位于第一行(标记为//第1行) 我试图理解JS如何知道如果所有的密钥都有相同的名称,则要考虑哪个巢是循环的。不知道我在理解上哪里出错了 var obj={ a:{//第1行 a:{//第2行 a:{//第3行 瑞典面积:5 } } } } 函数循环(obj,键名){ 用于(obj中的var键){ if(obj.hasOwnProperty(键)&&
obj[keys]
始终位于第一行(标记为//第1行)
我试图理解JS如何知道如果所有的密钥都有相同的名称,则要考虑哪个巢是循环的。不知道我在理解上哪里出错了
var obj={
a:{//第1行
a:{//第2行
a:{//第3行
瑞典面积:5
}
}
}
}
函数循环(obj,键名){
用于(obj中的var键){
if(obj.hasOwnProperty(键)&&typeofobj[keys]=“object”){
if(obj[keys][keyName]!==未定义){
console.log(obj[keys][keyName])
}否则{
//在我的理解中,在所有的迭代中,它将指向obj.a,标记为第1行
循环(对象[键],“Sweptrea”)
}
}
}
}
循环(obj,'sweptrea')
当你说obj[keys]
时,它只会在obj
上查找同名的键。该表达式本身不进行递归
每次调用函数时,传递给定义给
obj
参数的变量的值都不同。因为loop
函数中的obj
指的是obj
参数,而不是obj
变量?在顶层,您将obj
传递给loop
。在第一个递归调用中,您传递的是obj.a
too循环。当然,您在第二个递归调用中再次传递了obj.a
,但是该调用有其自己的obj
参数和不同的值。从顶层看,您实际上正在传递obj.a.a
等等。这可能无助于您理解外部变量和参数都被称为obj
。我知道了。感谢您明确指出,函数中的obj参数在每次迭代中都是不同的