Qual a diferença de var, let e const
O que acontece se declararmos uma variável sem "var", "let" ou "const"?
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.