Javascript 澄清为什么我的JS关闭没有正确返回?

Javascript 澄清为什么我的JS关闭没有正确返回?,javascript,closures,Javascript,Closures,我正在研究二和的解决方案(可能有点过度设计,但主要是为了让我熟悉递归和闭包),如果必要的话,我会尽量避免全局使用计数器。然而,我的函数返回未定义,我真的不知道我做错了什么 因此,我将我的功能(最初innerFunction是整个函数,startingIndex是全局的)包装在一个内部函数中,设置returnArray以在innerFunction中的递归完成后获取基本情况,并返回返回数组。将returnArray分配给innerFunction的返回值的位置似乎并不重要,它仍然没有定义。一定有一

我正在研究二和的解决方案(可能有点过度设计,但主要是为了让我熟悉递归和闭包),如果必要的话,我会尽量避免全局使用计数器。然而,我的函数返回未定义,我真的不知道我做错了什么

因此,我将我的功能(最初innerFunction是整个函数,
startingIndex
是全局的)包装在一个内部函数中,设置
returnArray
以在
innerFunction
中的递归完成后获取基本情况,并返回<代码>返回数组。将
returnArray
分配给
innerFunction
的返回值的位置似乎并不重要,它仍然没有定义。一定有一些关于执行上下文的东西我遗漏了,我确信这是显而易见的,但我画了一个空白

函数twoSum(numArr,目标){
设起始指数=0;
让returnArray=[];
函数innerFunction(数组,整数){
设startNum=array.shift();
设subtractedNum=integer-startNum;
let found=array.findIndex(函数(元素){
返回元素===subtractedNum
})
如果(发现>=0){
//found是缩短数组的索引
//为初始班次添加1
//添加起始索引,该索引加倍以跟踪到目前为止的移位量
让endingIndex=已找到+1+开始索引
返回[startingIndex,endingIndex];
}否则{
startingIndex++;
innerFunction(数组,整数);
}
}
returnArray=innerFunction(numArr,目标)
返回数组;
}

日志(twoSum([4,2,5,7,8,1,9,12,3],15))
您的
innerFunction
else
分支中不返回任何内容,但您将其调用的返回值分配给
returnArray
变量

您还必须返回递归调用的结果:

 } else {
     startingIndex++;
     return innerFunction(array, integer);
 }

您的
innerFunction
else
分支中不返回任何内容,但您将其调用的返回值分配给
returnArray
变量

您还必须返回递归调用的结果:

 } else {
     startingIndex++;
     return innerFunction(array, integer);
 }

您的结果未定义,因为此行需要返回语句:
innerFunction(数组,整数)

这里有一个可行的解决方案:

函数twoSum(位置、数组、整数){
让我们回答=[]
设startNum=array[position];
设subtractedNum=integer-startNum;
设索引=-1
对于(变量i=位置+1;i=0){
答案=[[位置,索引]]
}
如果(array.length-位置>1){
设theRest=twoSum(位置+1,数组,整数);
答案=[…答案,…答案]
}
回覆
}

log(twoSum(0,4,2,5,7,8,1,9,12,3,15))您的结果未定义,因为此行需要返回语句:
innerFunction(数组,整数)

这里有一个可行的解决方案:

函数twoSum(位置、数组、整数){
让我们回答=[]
设startNum=array[position];
设subtractedNum=integer-startNum;
设索引=-1
对于(变量i=位置+1;i=0){
答案=[[位置,索引]]
}
如果(array.length-位置>1){
设theRest=twoSum(位置+1,数组,整数);
答案=[…答案,…答案]
}
回覆
}

log(twoSum(0,4,2,5,7,8,1,9,12,3,15))您的代码是可以的,您只是忘记了
返回
,因此
返回内部函数(数组,整数)您的代码是可以的,您只是忘记了
返回
,因此
返回内部函数(数组,整数)这是一个递归调用,如果没有匹配项,则启动起点并调用innerFunction。直到成功才应该结束。你必须返回递归调用的结果。我明白你的意思了。你说得对,它现在起作用了。谢谢,我马上就接受你的回答。你能给我一个下载,为什么它在我包装它之前正确工作而不是之后正确工作吗?@AndreaMcKenzie不查看它很难检查代码,如果你添加原始代码,它会更容易告诉你。事实证明,我在执行过程中犯了另一个初学者的错误,这让我认为它没有工作。在
else
块中添加return语句修复了它。再次感谢你!如果出于任何原因,您碰巧想要满足您的好奇心,那么它就在这里:这是一个递归调用,如果没有匹配项,您将启动起点并调用innerFunction。直到成功才应该结束。你必须返回递归调用的结果。我明白你的意思了。你说得对,它现在起作用了。谢谢,我马上就接受你的回答。你能给我一个下载,为什么它在我包装它之前正确工作而不是之后正确工作吗?@AndreaMcKenzie不查看它很难检查代码,如果你添加原始代码,它会更容易告诉你。事实证明,我在执行过程中犯了另一个初学者的错误,这让我认为它没有工作。在
else
块中添加return语句修复了它。再次感谢你!如果出于任何原因,您碰巧想要满足您的好奇心,请点击这里: