I did not realize we were debating HOF versus pure functions.
That is, I'm fine with using both the pure and HO functions. I just think hiding the HOF ones behind a normal function call is usually a big win for readability.
So, to do the full example:
elements = [1,2,3,4]
doubledElements = doubleElements(elements)
function doubleElements(e) {
function double(n) { return n*2; }
return e.map(double);
}
Where I would assume the "reader" code would only have the first two lines. The rest would be behind the implementation layer. If the double function would be used elsewhere, no need to scope it to doubleElements.
Yes, the first example uses pure functions, but I guess you're confusing pure functions with HOFs [1]. The point is only having to write the implementation to double one number, and extrapolating it by composition. Consider that in your example, for instance, you would need a `doubleHash` function for hashes, and so on.
http://en.wikipedia.org/wiki/Higher-order_function