我对这段代码感到困惑,尽管它看起来很简单,但是我无法理解其工作原理
<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>
答案 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中,内部函数可以访问该函数外部定义的所有变量。”
在尝试理解代码之前,请先理解概念。