Esse guia é nada mais de anotações sobre as aulas de Javascript da turma TI 24 feita por Matheus Dantas (O tal Dante) para colegas e aprendizados. Ao longo das aulas, terá uma source aberta no GitHub para acesso de códigos, exemplos e etc. (¬‿¬)
No JavaScript, var
, let
e const
são palavras-chave usadas para declarar variáveis, cada uma com suas particularidades. var é a forma mais antiga e tem escopo de função ou global, permitindo reatribuição e redeclaração. let
e const
, introduzidos no ECMAScript 2015 (ES6), trazem melhorias significativas: let
tem escopo de bloco e permite reatribuição, enquanto const também tem escopo de bloco, mas é usada para constantes, não permitindo reatribuição. Essas distinções ajudam a escrever um código mais seguro e previsível.
function exemploVar() {
if (true) {
var x = 10;
console.log(x); // 10 - x está acessível aqui
}
console.log(x); // 10 - x ainda está acessível aqui devido ao escopo de função
}
exemploVar();
- Escopo de função: a variável é acessível em toda a função onde foi declarada.
- Permite redeclaração.
- Permite reatribuição.
Hoisting
: a declaração da variável é "elevada" ao topo do escopo, mas não a inicialização.
function exemploLet() {
if (true) {
let y = 20;
// y está acessível aqui
console.log(y); // imprimir 20
}
// Uncaught ReferenceError: y is not defined
console.log(y); // y não está acessível fora do bloco
}
exemploLet();
- Escopo de bloco: a variável é acessível apenas dentro do bloco onde foi declarada.
- Não permite redeclaração no mesmo escopo.
- Permite reatribuição.
Hoisting
: a variável é "elevada" ao topo do escopo de bloco, mas não pode ser usada antes da linha de declaração.
function exemploConst() {
if (true) {
const z = 30;
console.log(z); // 30 - z está acessível aqui
}
// console.log(z); // Uncaught ReferenceError: z is not defined - z não está acessível fora do bloco
}
exemploConst();
- Escopo de bloco: a variável é acessível apenas dentro do bloco onde foi declarada.
- Não permite redeclaração.
- Não permite reatribuição.
Hoisting
: a variável é "elevada" ao topo do escopo de bloco, mas não pode ser usada antes da linha de declaração.
-
var
: escopo de função.let
econst
: escopo de bloco.
-
var
: permitido.let
econst
: não permitido no mesmo escopo.
-
var
elet
: permitido.const
: não permitido (const
antes não podem ser reatribuídas).
-
var
: declarado no topo do escopo, inicializado comoundefined
.let
econst
: declarados no topo do escopo de bloco, mas não inicializados até a linha de declaração (causando um ReferenceError se acessados antes da declaração).
// Exemplo com var
var a = 1;
var a = 2; // Redeclaração permitida
a = 3; // Reatribuição permitida
console.log(a); // 3
// Exemplo com let
let b = 1;
// let b = 2; // Uncaught SyntaxError: Identifier 'b' has already been declared - Redeclaração não permitida
b = 2; // Reatribuição permitida
console.log(b); // 2
// Exemplo com const
const c = 1;
// const c = 2; // Uncaught SyntaxError: Identifier 'c' has already been declared - Redeclaração não permitida
// c = 2; // Uncaught TypeError: Assignment to constant variable. - Reatribuição não permitida
console.log(c); // 1
Esses exemplos ilustram claramente como usarvar
,let
econst
em diferentes situações e as regras associadas a cada um deles.