first-order Functions are not values in the language. They can only be defined in a designated portion of the program, where they must be given names for use in the remainder of the program.

higher-order Functions can return other functions as values.

first-class Functions are values with all the rights of other values. In particular, they can be supplied as the value of arguments to functions, returned by functions as answers, and stored in data structures.

From PLAI (ibid.), pp 4142

Closure: A closure is a first-class function with free variables that are bound in the lexical environment. (Thanks, Wikipedia.)