我正在为Two-Sum(也许有点过度设计,但是主要是让我对递归和闭包感到满意)的解决方案,并且在必要时我试图避免在全局范围内建立计数器。但是,我的函数返回的是未定义的,而且我真的不知道自己在做什么错。因此,我将功能(最初的innerFunction是函数的整体,而startingIndex是全局的)包装在一个内部函数中,将returnArray设置为在innerFunction的递归完成后获取基本情况,然后返回... 。我将returnArray分配给returnArray的返回值似乎无关紧要,但仍未定义。我必须缺少关于执行上下文的信息,我敢肯定这很明显,但是我正在空白。function twoSum(numArr, target) { let startingIndex = 0; let returnArray = []; function innerFunction(array, integer) { let startNum = array.shift(); let subtractedNum = integer - startNum; let found = array.findIndex(function(element) { return element === subtractedNum }) if (found >= 0) { //found is the index of the shortened array //add 1 for the initial shift //add starting index, which doubles to track the amount of shifts thus far let endingIndex = found + 1 + startingIndex return [startingIndex, endingIndex]; } else { startingIndex++; innerFunction(array, integer); } } returnArray = innerFunction(numArr, target) return returnArray;}console.log(twoSum([4,2,5,7,8,1,9,12,3], 15));我希望例如说innerFunction输出twoSum([4,2,5,7,8,1,9,12,3], 15),就像包装函数之前一样。我想念什么? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您的innerFunction在else分支中不返回任何内容,但是您将其调用的返回值分配给returnArray变量。您还必须返回递归调用的结果: } else { startingIndex++; return innerFunction(array, integer); } (adsbygoogle = window.adsbygoogle || []).push({}); 10-06 00:14