Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么递归函数不';是否从js中的主函数继承变量值?_Javascript_Recursion - Fatal编程技术网

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