Function declarations are hoisted; function expressions and arrow functions are not. Arrow functions have no own `this`, no `arguments` and cannot be used as constructors — which is exactly why they are safe as callbacks.
function double(n) { return n * 2; }
const add = (a, b) => a + b;
const obj = { n: 1, get() { return this.n; } };Default parameters and rest parameters cover most of what older code used `arguments` for.