Reading through the Wikipedia article on First-Class functions, there is a nice table of language support for various aspects of functional programming: http://en.wikipedia.
What you show is an example of higher order functions, functions that take functions as arguments and/or return functions.
Partial application is something different. Here a Haskell example:
add :: Int -> Int -> Int
add x y = x + y
addOne = add 1
add
is a function that takes two Int
and returns an Int
, denoted as Int -> Int -> Int
. If you're unfamiliar with the syntax, in Javascript this would roughly look like this:
/**
* @param int x
* @param int y
* @return int
*/
function add(x, y) {
return x + y;
}
add 1
calls this function with only one parameter, which returns a new function that takes one Int
and returns an Int
(Int -> Int
). The add
function was not explicitly designed to be a higher order function, it was simply partially applied.