Qual a diferença de var, let e const

O que acontece se declararmos uma variável sem "var", "let" ou "const"?

A variável é atribuída ao objeto "window", que representa a janela do browser. Portanto, se for declarada uma função:
function declaraNoWindow() {
    apostoQueEhGlobal = "é claro que é global"
}

PS: Ela também pode ser chamada com "window." na frente, pois ela faz parte do window.

Var

É um statement que declara uma variável.

Essa variável tem escopo de função, ou seja, ela "morre" após o término de seu escopo.

Se declarada fora da função, por conta do evento de Hoisting, ela é elevada também ao Window.

Porém dentro de uma função, ela tem seu escopo reduzido.Veremos os exemplos

v1 = 'Hello World';
var v2 = 2;

function f(){
    v3 = true;
    var v4 = v2+2;
}

f(); //Inicializa a função
                        

Porém, escopo de função ainda tem seus problemas:

function problemao() {
    var v5 = "até então, tudo ok"
    console.log(v5)
    if (2 + 2 === 4) {
        var v6 = "será que ela vai ser impressa fora do IF?";
        console.log(v6)
    }
    console.log(v6)
}
Let e Const

Essas variáveis possuem escopo de bloco, ou seja, "morrem" após seu bloco ser executado. Também sofrem consequências do efeito de Hoisting e vão parar no escopo com limite superior

Veremos o último exemplo do var e o que acontece com let e const, por terem escopo de bloco:

function semProblemao() {
    let v7
    v7 = "até então, tudo ok"
    console.log(v7)
    if (2 + 2 === 4) {
        let v8 = "será que ela vai ser impressa fora do IF?";
        console.log(v8)
    }
    console.log(v8)
}

Como imaginado, a variável let morre após o bloco terminar.

Mas e qual a diferença entre let e const?

function vaiQuebrar() {
    const v9
    v9 = "até então, tudo ok"
    console.log(v9)
}

Nem adianta colocar botão, porque ele nem sequer deixa criar a função. O const é uma variável que não pode ser reatribuída e, portanto, PRECISA que seja inicializada com um valor.