【问题标题】:This variable is an array. Why is it returning undefined?这个变量是一个数组。为什么它返回未定义?
【发布时间】:2016-08-12 00:57:59
【问题描述】:

这是解决Eloquent Javascript challenge in Chapter 4,A 列表的部分尝试。 theArray 返回未定义,但如果我只是打印它的值,它就是我所期望的(值数组)。为什么返回 undefined?

var obj = {"value":"C","rest":{"value":"B","rest":{"value":"A"}}};

var theArray =[];

var listToArray = function(list) {
  theArray.push(list.value);
    if(list.rest !== undefined) {
      listToArray(list.rest);
    } else return theArray; //console.log(theArray); returns the expected value
}

console.log(listToArray(obj));

【问题讨论】:

  • 你只是从else分支返回,而不是从if返回?

标签: javascript return return-value


【解决方案1】:

你必须返回递归调用,

 if(list.rest !== undefined) {
      return listToArray(list.rest);

DEMO

如果不返回递归调用,则不会返回最终函数堆栈中的array,而是返回undefined

【讨论】:

  • 这绝对解决了问题,但我不明白为什么。返回函数调用和简单地进行函数调用有什么区别?提前致谢。
  • @Landfizzle 这有点难以理解。所以我给你一个实际的例子。将函数调用视为站在一条直线上的人,比如 5 个人。每个人手里有 2 块钱(数组的值),我们的目标是从这 5 个人那里收集所有的钱。因此,我们将要求第一个将他的钱寄给第二个,然后第二个将他的钱加上,然后传递给下一个,依此类推,直到第 5 个人。现在第 5 个人会将收集到的全部款项退回 4,4 将退回 3,依此类推。
  • @Landfizzle 如果 3 丢了钱会发生什么。我们能从第一个得到所有的钱吗?不,因为第三个掉了它。因此,为了正确地收到钱,每个人都必须正确地退钱。 “如果一个函数没有返回任何东西,那么 undefined 将从那里开始返回直到开始。”
  • 所以这个比喻描述了用 return 语句编写的程序,对吗?只需一个简单的函数调用,这个比喻会是什么样子?
猜你喜欢
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多