函数范围内的函数

时间:2020-02-13 13:33:28

标签: 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>

3 个答案:

答案 0 :(得分:0)

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>

答案 1 :(得分:0)

它叫Closure

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

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

因此,当您使用某些参数调用外部函数时,它将返回一个新函数。调用时,内部函数会返回x定义了父变量(函数)时的父范围内的变量,并将y的参数传递给inner函数。因此,内部函数将记住x定义时的值。

例如

var add5 = makeAdder(5);

现在add5是一个函数,在初始化时,其父范围中的x值为5,因此无论何时调用add5(4),它都将执行x + y,其中定义了强制函数时的x = 5值,以及y = 4传递给add5函数或返回函数的值。

我希望能解释一下,但我建议阅读更多有关Javascript Closures的内容。我在上面添加了一个参考。

答案 2 :(得分:0)

尝试了解闭包在JavaScript中是如何工作的,那么您将能够理解。

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

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

相关问题