Message
ReferenceError: Atribuição à variável não declarada "x"(Firefox) ReferenceError: "x" não está definido (Chrome) ReferenceError: Variável indefinida em strict mode (Edge)
Tipo de erro
ReferenceError
aviso em strict mode somente.
O que deu errado?
Um valor foi atribuído a uma variável não declarada. Em outras palavras, houve uma atribuição sem a palavra-chave var. Existem algumas diferenças entre as variáveis declaradas e não declaradas, o que pode levar a resultados inesperados e é por isso que o JavaScript apresenta um erro no modo estrito.
Três coisas a observar sobre as variáveis declaradas e não declaradas:
- Variáveis declaradas são limitadas no contexto de execução em que são declarados. Variáveis não declaradas são sempre globais.
- Variáveis declaradas são criados antes de qualquer código ser executado. Variáveis não declaradas não existem até que o código atribuido for executado.
- Variáveis declaradas são uma propriedade não-configurável de seu contexto de execução (função ou global). Variáveis não declaradas são configuráveis (por exemplo, pode ser excluído).
Para mais exemplos, veja a página de referência var
.
Erros sobre atribuições de variáveis não declaradas ocorrem apenas em código de modo estrito. Em código não-estrito, eles são silenciosamente ignorados.
Examplos
Casos inválidos
neste caso, a variavel "bar" é uma variavel não declarada.
function foo() { "use strict"; bar = true; } foo(); // ReferenceError: assignment to undeclared variable bar
Casos válidos
Para fazer uma variável declarada "bar", você pode adicionar a palavra-chave var na frente dele.
function foo() { "use strict"; var bar = true; } foo();