¿Qué es el error 'Uncaught ReferenceError: X is not defined' en JavaScript?
El error ReferenceError en JavaScript ocurre cuando intentas acceder a una variable, función o clase que no ha sido declarada en el ámbito actual de ejecución. El motor de JavaScript no reconoce el identificador y detiene la ejecución del script, arrojando esta excepción en la consola del navegador o en el entorno de Node.js.
Causas principales del ReferenceError
Entre los motivos más comunes por los cuales se produce este fallo en el desarrollo web se encuentran:
- Errores tipográficos o de sintaxis al escribir el nombre de la variable.
- Intentar usar una variable antes de que haya sido declarada (problemas de hoisting con
letyconst). - Alcance (scope) incorrecto: intentar acceder a una variable local desde el ámbito global o fuera de su función contenedora.
- Carga asíncrona o orden incorrecto de los archivos de script en el documento HTML.
Método 1: Verificar errores tipográficos y alcance de variables
El primer paso para solucionar este problema es revisar detalladamente el nombre de la variable en la línea indicada por la consola.
- Abre las herramientas de desarrollo de tu navegador (F12) y observa el archivo y número de línea del error.
- Verifica que la variable esté correctamente escrita respetando mayúsculas y minúsculas.
- Asegúrate de haber declarado la variable usando
let,constovarantes de llamarla. Ejemplo incorrecto:console.log(miVariable);. Ejemplo correcto:let miVariable = 'Hola'; console.log(miVariable);.
Método 2: Comprobar el orden de carga de los scripts en HTML
Si la variable o función proviene de una librería externa o de otro archivo JavaScript personalizado, es muy probable que el script se esté ejecutando antes de que el recurso esté disponible.
- Revisa tu archivo HTML principal (index.html).
- Asegúrate de que los archivos de script dependientes se carguen después de las librerías necesarias.
- Utiliza el atributo
deferoasyncen la etiqueta script de manera adecuada, o coloca las etiquetas<script>justo antes de la etiqueta de cierre</body>para garantizar que el DOM esté completamente cargado. Ejemplo:<script src='app.js' defer></script>.