我从Headfirst Javascript书中获得了这段代码。我更改了函数名称以使其更清晰。我试图绕过这个。
我指定使用数字添加到外部函数。该数字由于某种原因仍然存在 - 返回对内部的引用,其中n = num(返回添加的值?
任何时候我改变outers n值,内部会使用那个新值吗? 我相信我是对的。有什么地方我可以阅读更多关于它的内容吗?看更好的例子?或者,任何人都能更好地解释这个吗?
function outer(n) {
var inner = function(x) { //or x = 0
return n + (x || 0); //added default 0 for testing to prevent NaN
}
return inner;
}
var num = 2;
var add = outer(num);
console.log(`Adding 2 to num(${num}): ${add(2)}`);
add = outer(5);
console.log(add());
console.log(add(2));

答案 0 :(得分:1)
让我们重命名这些功能,使其更加清晰。外部函数接受一个参数并使用它来创建一个新函数。返回此新功能以供将来使用。
function createFunctionThatAdds(n){
var adds_n = function(x) { return n + (x || 0); };
return adds_n;
}
var adds_2 = createFunctionThatAdds(2);
var adds_5 = createFunctionThatAdds(5);
console.log(adds_2(10));
console.log(adds_5(10));
答案 1 :(得分:1)
使用的技术称为javac -source 1.8 -target 1.8 YourFile.java
。它是功能性javascript的一部分。
您可以详细了解here。
它背后的想法是你可以使用一个函数来生成另一个函数,你可以在你的代码中进一步使用它。
由于closure。
,因此可以进行卷曲有很多基于该原则构建的库,例如Ramda。
答案 2 :(得分:1)
在JavaScript中,函数可以充当常规数据。如果您对传递数字或字符串的想法没有问题,那么传递函数也没有什么不同。这使您能够做一些非常酷和强大的事情。
此处,代替add
功能只是简单地给出您的数字答案,它会为您提供一个函数,其中包含您的数字。这意味着add
并没有真正添加任何内容,add
是一个用于创建函数的函数(类似于" Factory"在基于类的编程中的想法)。 / p>
更改名称可能会使事情变得更容易:
function createAddFunction(numberThatWillBeHardWiredIntoReturnedFunction) {
var resultingFunction= function(x) { //or x = 0
return numberThatWillBeHardWiredIntoReturnedFunction + (x || 0);
}
return resultingFunction;
}
var num = 2;
// This will cause add to be a function that is hard-wired to add 2 to another number
var add = createAddFunction(num);
console.log(`Adding 2 to num(${num}): ${add(2)}`);
// This will cause add to be a function that is hard-wired to add 5 to another number
add = createAddFunction(5);
console.log(add());
console.log(add(2));