📌 Variáveis no JavaScript
Entender como o JavaScript lida com variáveis é fundamental para evitar erros e escrever código limpo.
Aqui veremos as diferenças entre var
, let
, const
, além do modo
strict e como a linguagem trata a tipagem dinâmica.
🔒 O que é "use strict"?
O "use strict"
ativa o modo restrito do JavaScript. Ele muda a forma como o
motor interpreta o código, tornando-o mais seguro e menos propenso a erros silenciosos.
- Evita a criação de variáveis globais sem querer.
- Impede a duplicação de nomes de parâmetros.
- Lança mais erros explícitos (em vez de ignorar).
"use strict";
x = 10; // ❌ ReferenceError (sem 'var', 'let' ou 'const')
📍 Características do var
- Escopo de função (não de bloco).
- Pode ser redeclarada sem erro.
- Sofre hoisting (é “içada” para o topo do escopo).
function exemplo() {
if (true) {
var a = 5;
}
console.log(a); // ✅ 5 (var ignora o bloco)
}
📍 Características do let
- Escopo de bloco (
{ }
). - Não pode ser redeclarada no mesmo escopo.
- É inicializada apenas quando o código atinge sua linha.
if (true) {
let b = 10;
}
console.log(b); // ❌ ReferenceError (fora do escopo)
📍 Características do const
- Escopo de bloco, assim como
let
. - Deve ser inicializada no momento da declaração.
- Não pode ser reatribuída.
- Objetos e arrays podem ser mutados, mas não reatribuídos.
const PI = 3.14;
PI = 3.1415; // ❌ TypeError: Assignment to constant variable
const user = { nome: "Hendrix" };
user.nome = "CodeWiki"; // ✅ permitido (mutação de objeto)
⚠️ ReferenceError e TypeError
ReferenceError: acontece quando tentamos acessar uma variável que não existe ou não foi declarada.
console.log(x); // ❌ ReferenceError: x is not defined
TypeError: ocorre quando tentamos realizar uma operação inválida em um tipo de dado, como reatribuir uma constante.
const y = 50;
y = 100; // ❌ TypeError: Assignment to constant variable
🔄 Tipagem Dinâmica e Casting Automático
O JavaScript é uma linguagem de tipagem dinâmica, ou seja, o tipo da variável pode mudar em tempo de execução. Além disso, ele realiza type coercion (conversão implícita de tipos) em algumas operações.
let n = 10; // número
n = "dez"; // agora é string
console.log("5" + 2); // "52" (concatenação)
console.log("5" - 2); // 3 (conversão automática para número)
👉 Resumindo: prefira let
e const
no dia a dia, use "use strict"
para evitar erros silenciosos e lembre-se que o JavaScript pode mudar o tipo de variáveis dinamicamente.