我认为问题在于您误解了使用中间值的含义(或者他们歪曲了它,我没有阅读链接)。考虑函数式语言中的变量是definition
某物的,并且该定义不能改变。在函数式编程中使用值/公式的名称是完全可以接受的,只要它们不改变。
function calculate(a,b,c) {
// here we define an name to (a+b) so that we can use it later
// there's nothing wrong with this "functionally", since we don't
// change it's definition later
d = a + b;
return c * d;
}
另一方面,从功能上讲,以下是不行的
function sum(listofvalues) {
sum = 0;
foreach value in listofvalues
// this is bad, since we're re-defining "sum"
sum += value;
return sum
}
对于更接近您代码中的内容...考虑您有一个函数调用map that takes a list of things and a function to apply to a thing and returns a new list of things. It's perfectly acceptable to say:
function add_value(amount) {
amount_to_incr = amount * 2;
return function(amount, value) {
// here we're using that "amount" value provided to us
// the function returned will always return the same value for the same
// input... its "referentially transparent"
// and it uses the "intermediate" value of amount_to_incr... however, since
// that value doesn't change, it's fine
return amount_to_incr + value;
}
}
map [1,2,3] add_value(2) ;// -> [3,4,5]