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;
```