Qualquer variável definida sem a utilização do var, let ou const possui escopo global e pode ser acessada em qualquer parte de seu código JavaScript e isso pode acarretar uma série de problemas, mas qual a diferença entre essas palavras?

A palavra-chave var

Para definirmos escopos locais com a palavra-chave var é necessário que ela esteja dentro de uma função, mas repetindo-a, mesmo dentro de outros blocos da mesma função, seu valor é sobreescrito:

function varExemplo() {
  var x = 1;
  if (true) {
    var x = 2; // mesma variável

    console.log(x); // 2

  }
  console.log(x); // 2

}

console.log(x); // undefined

A palavra-chave let

Não sendo possível criar variáveis locais por bloco com a palavra var, a palavra-chave let foi criada permitindo essa funcionalidade nas novas versões da linguagem, provendo um escopo mais limitado:

function letExemplo() {
  let x = 1;
  if (true) {
    let x = 2; // mesma variável

    console.log(x); // 2

  }
  console.log(x); // 1

}

console.log(x); // undefined

A palavra-chave const

Alguns valores em nosso código precisam tanto terem um escopo reduzido, quanto serem imutáveis. E a palavra const foi criada exatamente para isso. Possuindo as mesma funcionalidades da palavra let, a const traz a imutabilidade para identificadores nas últimas versões da linguagem.

function constExemplo() {
  const x = 1;
  if (true) {
    var x = 2; // Identifier 'x' has already been declared

    let x = 2; // Identifier 'x' has already been declared

    const x = 2; // Identifier 'x' has already been declared

    console.log(x); // 1

  }
  console.log(x); // 1

}

console.log(x); // undefined

Após a implementação das palavras-chaves let e const no ECMAScript 6, o uso da palavra var se tornou “depreciada” entre desenvolvedores JavaScript por conta dos benefícios que o let traz em comparação à ela, mas se você quer que sua variável seja global ainda é totalmente válido utilizá-la.