A first-class citizen in a given programming language is an entity which supports all the operations generally available to other entities. These operations typically include being passed as an argument, returned from a function, and assigned to a variable.
A programming language is said to have first-class functions if it treats functions as first-class citizen.
A higher-order function is a function that takes functions as parameters, or returns a function. All other functions are first-order functions.