Sobes.tech
Junior

O que são variáveis não declaradas (undeclared)?

sobes.tech IA

Resposta da IA

As variáveis não declaradas em JavaScript são variáveis que não foram declaradas usando as palavras-chave var, let ou const, mas às quais foi atribuído um valor.

// Declaração explícita
let variávelDeclarada = "Estou declarada";

// Atribuição implícita (cria uma variável não declarada em modo não estrito)
// Em modo estrito ('use strict'), isto causará um erro ReferenceError
variávelNãoDeclarada = "Não estou declarada";

O comportamento das variáveis não declaradas depende do modo de execução do código:

  • Modo não estrito: A atribuição de um valor a uma variável não declarada cria uma variável global com esse nome no Window (para navegadores). Isto é considerado uma má prática, pois polui o espaço global e dificulta a depuração.
  • Modo estrito ('use strict'): A atribuição a uma variável não declarada gera um erro ReferenceError. Este comportamento é preferível, pois impede a criação acidental de variáveis globais e promove um código mais previsível.

A verificação de uma variável não declarada pode ser feita usando typeof. Uma variável não declarada em modo não estrito terá o tipo 'undefined', assim como uma variável declarada mas não inicializada.

let inicializadaMasIndefinida;
// console.log(typeof inicializadaMasIndefinida); // => 'undefined'

// Em modo não estrito
// variávelNãoDeclarada = "Teste";
// console.log(typeof variávelNãoDeclarada); // => 'undefined'

// Verificação da existência da variável antes de aceder a ela
if (typeof potencialmenteNãoDeclarada !== 'undefined') {
    // Código para trabalhar com potencialmenteNãoDeclarada
}

O uso de variáveis não declaradas é uma fonte potencial de erros e dificulta a manutenção do código. Recomenda-se sempre declarar explicitamente as variáveis usando let, const ou var (embora var tenha as suas particularidades e, no código moderno, let e const sejam preferidos). O uso do modo estrito ('use strict') é uma prática padrão para prevenir este tipo de problemas.