带return语句和不带return语句的Javascript递归

带return语句和不带return语句的Javascript递归,javascript,recursion,indexing,numbers,return,Javascript,Recursion,Indexing,Numbers,Return,这两个递归函数之间有区别吗?一个带有return语句,另一个不带return语句用于递归调用。它们都在控制台浏览器中打印数字1-8,我的问题是,当递归发生时,是否有一些优化在引擎盖下发生,返回与否 const solution=(输入,i=0)=>{ if(i==input)返回//基本情况 控制台日志(i) 返回解决方案(输入,i+1)//返回递归调用 } 常量解决方案2=(输入,i=0)=>{ if(i==input)返回//基本情况 控制台日志(i) 解决方案2(输入,i+1)//递归调

这两个递归函数之间有区别吗?一个带有return语句,另一个不带return语句用于递归调用。它们都在控制台浏览器中打印数字1-8,我的问题是,当递归发生时,是否有一些优化在引擎盖下发生,返回与否

const solution=(输入,i=0)=>{
if(i==input)返回//基本情况
控制台日志(i)
返回解决方案(输入,i+1)//返回递归调用
}
常量解决方案2=(输入,i=0)=>{
if(i==input)返回//基本情况
控制台日志(i)
解决方案2(输入,i+1)//递归调用
}
控制台日志(解决方案(4))
控制台日志(“---”)

log(solution2(4))
如果最后的递归调用没有返回任何内容(如您问题中的示例所示),则没有区别


如果最终的递归调用确实返回了一些内容,并且您希望这些内容渗透到
解决方案的初始调用方
,那么您确实需要返回递归调用:

const solution=(输入,i=0)=>{
if(i==input)返回'returnVal'//基本情况
返回解决方案(输入,i+1)//返回递归调用
}
常量解决方案2=(输入,i=0)=>{
if(i==input)返回'returnVal'//基本情况
解决方案2(输入,i+1)//递归调用
}
控制台日志(解决方案(9))
控制台日志(“---”)

console.log(solution2(9))
为什么不运行它们,看看它们之间的区别呢?我相信每个函数都有一个隐式的返回,所以这样说就没有什么区别了——没有广泛实现——也就是说,只有Safari和IOS浏览器(移动)以及一些模糊的服务器运行时实现了it@JaromandaX朱普。即使在6年后,ES6/ES2015仍没有完全实施,只是几年前的事。这也意味着ES2016-ES2019也没有实施,因为它们都依赖于ES2015。