当使用 return 时,为什么递归只产生第一个嵌套对象值的值而不产生其余的值?

Why does recursion only result in the values of first nested object values and not the rest, when used return?

我在使用下面的代码首先递归地遍历 'object' 对象时使用了 return 关键字,但它只通过循环一个数字得到了国王 属性 的对象次,当达到sika属性和value时,结束循环。

let object = {king: {lisa: {biza: {sika: 21}}}, queen:{billy: {silly: 23}}, guard: {son: 4}};

function goThrough(obj) {
  let list = Object.keys(obj);

  for(let keys of list) {
    console.log("property: " + keys + ", value: " + JSON.stringify(obj[keys]));
    goThrough(obj[keys]); //Note: using return keyword here results in only king's values looped over
  }  
}

goThrough(object);

但是当我省略 return 时,它会遍历其余对象及其 属性 值对。有人可以解释为什么在使用 return 时它只以第一个对象值结尾吗?

需要[object object]转换成字符串以提高可见性,这里是代码

let object = {king: {lisa: {biza: {sika: 21}}}, queen:{billy: {silly: 23}}, guard: {son: 4}};

function goThrough(obj) {
  let list = Object.keys(obj);

  for(let keys of list) {
    console.log("property: " + keys + ", value: " + JSON.stringify(obj[keys]));
    goThrough(obj[keys]);
  }  
}

goThrough(object);

当您将 return 语句放入循环中时,该循环仅针对 key 的一个值执行(在本例中为 "king")。然后,它 return 超出了功能,因此其他键不会被触及。希望这有帮助:)

为了更容易理解in循环递归,在循环内的goThrough()之后放一个return。

let object = {king: {lisa: {biza: {sika: 21}}}, queen:{billy: {silly: 23}}, guard: {son: 4}};

function goThrough(obj) {
  let list = Object.keys(obj);

  for(let keys of list) {
    console.log("property: " + keys + ", value: " + obj[keys]);
    goThrough(obj[keys]);
    return;
  } 

}

console.log(goThrough(object))

如上所示使用return时,一旦代码从递归返回,它会立即停止函数执行,不会经过其他属性queen和guard。您明确禁止使用 return.

如果省略 return,在完成第一个分支 king: {lisa: {biza: {sika: 21}}} 后,代码将继续使用其他属性并尽可能深入。同样的事情发生在第一个 属性 国王身上,它下降到它的所有 children (tnx 递归)。

多了解一下。在代码中放置断点并观察堆栈调用,填充函数并从中 returning。您也可以在 goThrough()return 之间放置一个控制台并分析输出。