Javascript 为什么递归函数不';是否从js中的主函数继承变量值?
Javascript 为什么递归函数不';是否从js中的主函数继承变量值?,javascript,recursion,Javascript,Recursion,let加法器=()=>{ 如果(总和==未定义){ var总和=0 } 总和=总和+10 控制台日志(总和) 如果(总和>=100){ 回报金额 } 加法器() }javascript中的变量总是在调用它们的函数中起作用。如果在函数中定义一个sum变量并调用一个函数,即使是同一个函数,该函数也无法访问该变量。但是,您可以定义一个全局变量,内部函数可以访问它。但是,不建议这样做,这与递归的概念背道而驰 解决方案1(全局变量,不推荐): //注意这是如何在任何函数之外声明的 var和; 让加法器=(
let加法器=()=>{
如果(总和==未定义){
var总和=0
}
总和=总和+10
控制台日志(总和)
如果(总和>=100){
回报金额
}
加法器()
}
javascript中的变量总是在调用它们的函数中起作用。如果在函数中定义一个sum
变量并调用一个函数,即使是同一个函数,该函数也无法访问该变量。但是,您可以定义一个全局变量,内部函数可以访问它。但是,不建议这样做,这与递归的概念背道而驰
解决方案1(全局变量,不推荐):
//注意这是如何在任何函数之外声明的
var和;
让加法器=()=>{
如果(总和==未定义){
//这里的var是为了避免在局部范围内重新声明
总和=0
}
总和=总和+10
控制台日志(总和)
如果(总和>=100){
回报金额
}
//我们还返回值
返回加法器()
}
解决方案2(建议正确递归):
//注意sum现在是一个参数
设加法器=和=>{
如果(总和==未定义){
总和=0
}
总和=总和+10
控制台日志(总和)
如果(总和>=100){
回报金额
}
//我们将sum作为参数传入并返回它
返回加法器(和)
}
如何利用closure属性
const加法器=(和=0)=>
()=>++和
常数a=加法器()
常数b=加法器()
log(a(),a(),a())//1 2 3
console.log(b(),b(),b())//1 2 3
log(a(),a(),a())//4 5 6
console.log(b(),b(),b())//456
var-sum
被提升到函数的顶部,因此您的函数实际上是var-sum;如果(sum==未定义)sum=0代码>始终为真。将要累加的值传递给函数的下一次调用。@Aplet123,谢谢!我明白了。如果我在解决方案2中使用不返回的递归函数加法器(sum),那么你能解释一下为什么当sum达到100时会返回undefined吗?最后一个加法器
调用返回100,但之前的加法器
调用没有返回,所以它只是默认为undefined
。