Javascript 函数内部用于作用域的函数

Javascript 函数内部用于作用域的函数,javascript,Javascript,我对这段代码感到困惑,它是如何工作的尽管它看起来很简单,但我不明白它工作的意义 <script> function makeAdder(x) { return function(y) { return x + y; }; } var add5 = makeAdder(5); var add10 = makeAdder(10); console.log(add5(2)); console.log(add10(2)); </script> 函数makeAdder

我对这段代码感到困惑,它是如何工作的尽管它看起来很简单,但我不明白它工作的意义

<script>
function makeAdder(x) {
 return function(y) {
 return x + y;
 };
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2)); 
console.log(add10(2)); 
</script>

函数makeAdder返回一个函数,该函数已经将x设置为您传递给makeAdder的值

<script>
function makeAdder(x) {
    return function(y) {
        return x + y;
    };
}
var add5 = makeAdder(5);
//at this point "add5" looks like this:
/*
function add5(y){
    return 5 + y;
}

so if we do: add5(2) - we know why we see the result we do
*/

console.log(add5(2)); 

</script>
这叫做结束

如果在函数中引用某个变量,它会首先检查该函数内其作用域中的该变量,如果未找到该变量,则会查找定义/声明该变量的环境

因此,当您使用某个参数调用外部函数时,它将返回一个新函数。调用时的内部函数返回父作用域中变量x的和(当定义该函数时),并返回传递给Inner函数的参数y。因此,内部函数在定义x时会记住x的值

e、 g

现在add5是一个函数,初始化时,它的父作用域中x的值是5,所以无论何时调用add54,它都会执行x+y,其中定义重新运行的函数时x=5,y=4传递给add5函数或返回函数的值


我希望这能解释这一点,但我建议阅读更多关于Javascript闭包的内容。我在上面添加了一个参考。

试着理解闭包在JavaScript中是如何工作的,然后您就能够理解了

闭包可以简单地定义为JavaScript,内部函数可以访问该函数外部定义的所有变量


在尝试理解代码之前,请尝试理解概念。

我感到困惑并不是一个真正可以回答的问题。首先格式化代码,以确保可读性缩进很重要。从这里开始,您从这个代码中观察到了什么行为?你期待什么样的行为?为什么?我只是问这段代码的工作原理,它是如何工作的?你能帮我了解这段代码的工作原理吗?我只是对此很感兴趣。我建议读一下闭包函数对象。你说当我用一些参数调用我的外部函数时,它会返回一个新函数,这到底意味着什么?你能详细解释一下吗
var add5 = makeAdder(5);