Higher order functions:
- Pass a function name as an argument to another function (add functionality to the decorated function without modifying its source code)
- The return value contains the function name (does not modify the calling method of the function)
Nested functions:
function declares another function