Qual a diferença entre var, const e let?

Qual a diferença entre var, const e let no Javascript

Conteúdo

Na maior parte das linguagens de programação, as variáveis possuem o escopo vinculado ao bloco onde elas são declaradas.

Ou seja elas “morrem” ao final do bloco em que as variáveis foram declaradas.

Entretanto o Javascript tem essa particularidade ele funciona um pouco diferente 🙂

Entendendo o escopo das variáveis locais em javascript

Veja o exemplo abaixo:

function showMenssage() {
 var num = 10;

  if(true) {
     var num2 = 20;
     console.log(num2); // output => 20
  }

  console.log(num2); // output => 20
  console.log(num); // output => 10
}

Se voce executar esse código vai perceber que a variável num2 foi declarada dentro do bloco do if e mesmo assim quando damos console nela na linha 9 conseguimos logar o valor.

Em outras linguagens provavelmente ocorreria um erro de variável indefinida, pois estamos dando um log em uma variável que foi criada no bloco do if ela deveria “morrer” no final do bloco, porém em javascript não é tão simples assim hehe.

Ou seja temos acesso a variável num2 que foi criada dentro do bloco do if.

Antes de prosseguir vamos ver mais um exemplo.

function showMenssage() {
  num = 10;
  console.log(num);
  var num;
}

Por incrível que pareça esse código vai funcionar mais como é possível usar a variável num antes mesmo de declará-la? Será que o escopo é garantido apenas dentro de onde a variável foi criada?

Isso é possível por causa de uma coisa chamada Hoisting

O que é o Hoisting e como funciona no Javascript?

O Hoisting ocorre quando seu código é compilado todas as declarações de variáveis são movidas para o todo do escopo local (Quando são declaradas dentro de uma função) ou para o topo do escopo global (Caso declarado fora de uma função) as declarações de funções e classes também são movidas para o topo e ficam antes das declarações de variáveis.

Movidas nesse caso seria mais um visão conceitual, pois as declarações de variável e função são colocadas na memória durante a fase de compilação, mas permanecem exatamente onde você as digitou no seu código.

Exemplo 01:

function showMenssage() {
  num = 10;
  console.log(num);
  var num;
} // Output => 10;

Exemplo 02

function showMenssage() {
  num;
  console.log(num);
  var num = 10;
} // Output => undefined;

Nos dois exemplos apesar da variável num ser executada antes da declaração mesmo assim ela mosta a saída em outras linguagens provavelmente ocorreia um erro.

Mais a final qual as diferença entre let, const e var ?

De forma resumida:

O var pode ser declarado sem ser inicializado e está disponível fora do seu escopo.


O let pode ser declarado sem ser inicializado e não está disponível fora do seu escopo.

function showMenssage() {
 let num = 10;

  if(true) {
     let num2 = 20;
     console.log(num2); // output => 20
  }

  console.log(num2); // output => 20
  console.log(num); // output => 10
}

O const não pode ser declarado sem ser inicializado e não está disponível fora do seu escopo.

function showMenssage() {
 const num = 10;

  if(true) {
     const num2 = 20;
     console.log(num2); // output => 20
  }

  console.log(num2); // output => 20
  console.log(num); // output => 10
}

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *