var:
  function scoped
  undefined when accessing a variable before it's declared
let:
  block scoped
  ReferenceError when accessing a variable before it's declared
const:
  block scoped
  ReferenceError when accessing a variable before it's declared
  can't be reassigned