Var, let ou const, qual devo usar?

Quando falamos em Javascript é normal vir à cabeça algumas das peculiaridades da linguagem, e para iniciantes muitas coisas parecem tão bicho de sete cabeças, por exemplo as opções de declaração de variáveis. No início eu também me perguntava o por quê de existir as palavras chave var , let e const para declaração de variáveis, como e quando usá-las. Pois bem, vamos tentar entender os conceitos e usos, mas antes vamos falar do famoso hoisting . Hoisting Em Javascript todas as variáveis sofrem hoisting — são içadas/elevadas — ao topo do contexto de execução no qual elas estão. Então por esse motivo é possível usar uma variável antes dela ter sido declarada — não confunda com usar sem declarar, isso daria erro —, pois em tempo de execução a variável sofrerá hoisting — será elevada — e tudo funcionará como esperado. Conceito de hoisting entendido até agora, certo...