📌 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.

"use strict";

x = 10; // ❌ ReferenceError (sem 'var', 'let' ou 'const')

📍 Características do var

function exemplo() {
  if (true) {
    var a = 5;
  }
  console.log(a); // ✅ 5 (var ignora o bloco)
}

📍 Características do let

if (true) {
  let b = 10;
}
console.log(b); // ❌ ReferenceError (fora do escopo)

📍 Características do const

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.