Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法理解嵌套javascript对象中的递归行为_Javascript_Recursion - Fatal编程技术网

无法理解嵌套javascript对象中的递归行为

无法理解嵌套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(键)&&

我试图理解递归如何处理可能具有相同键名的嵌套js对象。例如,在下面的对象中,关键点在嵌套中是相同的。 因此,当我循环时,我希望
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参数在每次迭代中都是不同的