试图将此功能理解为价值

时间:2016-11-20 20:06:23

标签: javascript

我从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));




3 个答案:

答案 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));