3
我想了解遞歸如何使用可能具有相同鍵名的嵌套js對象。例如在下面的對象中,鍵在嵌套中是相同的。 因此,當我循環時,我期待obj[keys]
將始終走第一行(標記爲//第1行)。無法理解嵌套javascript對象中的遞歸行爲
我想了解如何js會知道如果所有的鍵具有相同的名稱考慮哪個嵌套循環。不知道在那裏當你說obj[keys]
是隻查找名字上obj
的關鍵,我錯了理解
var obj = {
a: { // Line 1
a: { // Line 2
a: { // Line 3
sweptArea: 5
}
}
}
}
function loop(obj, keyName) {
for (var keys in obj) {
if (obj.hasOwnProperty(keys) && typeof obj[keys] === 'object') {
if (obj[keys][keyName] !== undefined) {
console.log(obj[keys][keyName])
} else {
// In my understanding in all the iteration it will point to obj.a marked as line one
loop(obj[keys], 'sweptArea')
}
}
}
}
loop(obj, 'sweptArea')
因爲'loop'函數中的'obj'是指'obj'參數而不是'obj'變量? –
在頂層,您將'obj'傳遞給'loop'。在第一次遞歸調用中,你傳遞了'obj.a'太循環。當然,你正在第二次遞歸調用中傳遞'obj.a' * *,但是這個調用有自己的具有不同值的'obj'參數。看一下你實際傳遞'obj.a.a'等等的頂層。 –
它可能無助於你的理解,即外部變量和參數都被稱爲'obj'。 –