A function declaration can be called before it's defined: ```js add(2, 3); function add(num1, num2) { return num1 + num2; } ``` The JavaScript engine moves all function declarations to the top of their current scope. This is known as *hoisting*. Function declarations are hoisted, but function expressions (including arrow functions) are **not**. #### Anonymous Functions A function without a name after the `function` keyword. Anonymous functions are used as callbacks ```js setTimeout(function() { alert('test'); }, 2000) ``` or in function expressions: ```js const add2 = function (num) { return num + 2; } // arrow syntax const add2 = num => num + 2; ```