Junior
De que formas é possível declarar variáveis em JavaScript? Nomeie as diferenças entre esses métodos.
sobes.tech IA
Resposta da IA
Em JavaScript, as variáveis podem ser declaradas de três formas: var, let, const.
Diferenças entre elas:
| Diferença | var |
let |
const |
|---|---|---|---|
| Escopo | Funcional | Bloco | Bloco |
| Re-declaração | Possível | Possível | Não possível |
| Reatribuição | Possível | Possível | Não possível |
| Hoisting | Eleva a declaração e a inicialização a undefined |
Eleva a declaração, mas não a inicialização | Eleva a declaração, mas não a inicialização |
Exemplos:
// var
function exemploVar() {
var x = 10; // Escopo funcional
if (true) {
var x = 20; // Re-declaração possível dentro da mesma função
console.log(x); // 20
}
console.log(x); // 20 (a variável x do if está acessível aqui)
}
console.log(x); // Erro: ReferenceError: x não está definido (x não é visível fora da função)
// Hoisting com var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function exemploLet() {
let y = 10; // Escopo de bloco
if (true) {
let y = 20; // Re-declaração não possível dentro do mesmo bloco
console.log(y); // 20 (é outra variável y)
}
console.log(y); // 10 (a variável y fora do bloco)
}
console.log(y); // Erro: ReferenceError: y não está definido
// Hoisting com let
// console.log(b); // Erro: ReferenceError: Não é possível aceder a 'b' antes da inicialização
let b = 5;
console.log(b); // 5
// const
function exemploConst() {
const z = 10; // Escopo de bloco
// z = 20; // Erro: TypeError: Atribuição a variável constante. (Reatribuição não possível)
if (true) {
const z = 20; // Re-declaração não possível dentro do mesmo bloco
console.log(z); // 20 (é outra variável z)
}
console.log(z); // 10 (a variável z fora do bloco)
}
console.log(z); // Erro: ReferenceError: z não está definido
// Hoisting com const
// console.log(c); // Erro: ReferenceError: Não é possível aceder a 'c' antes da inicialização
const c = 5;
console.log(c); // 5
// Para objetos e arrays declarados com const, é possível modificar o conteúdo
const obj = { name: 'Test' };
obj.name = 'Novo Test'; // Permitido
// obj = { name: 'Outro Test' }; // Erro