How do I fix ReferenceError: x is not defined in JavaScript?

Updated October 2026 · How we answer

Short answerA ReferenceError in JavaScript means you're trying to use a variable that hasn't been declared or is out of scope. Fix it by declaring the variable with let, const, or var, or by checking for typos and scope issues.

Why It Happens

JavaScript throws ReferenceError when you access a variable that doesn't exist in the current scope. This often happens due to typos, using a variable before declaration (especially with let and const, which are not hoisted in the same way as var), or trying to access a variable outside its block scope.

Another common cause is missing a script file or using a variable from a module without importing it. In browsers, using a variable that's not declared with var, let, or const in strict mode also triggers this error.

  • Misspelling a variable name.
  • Using a variable before it's declared with let or const.
  • Accessing a block-scoped variable outside its block.
  • Forgetting to import a module or script.
  • Using a global variable that hasn't been defined.

How to Fix It

First, check the spelling of the variable in the error message. Make sure you've declared it with let, const, or var before using it. If it's supposed to be global, ensure it's declared in the global scope or attached to window (in browsers). For modules, add the necessary import statement.

If you're using a variable inside a function that's defined outside, ensure it's in scope or passed as a parameter. Using 'use strict' can help catch undeclared variables early. Tools like ESLint can also flag these issues.

Common mistakes

  • Thinking that var hoisting applies to let and const—they are hoisted but not initialized, leading to a temporal dead zone.
  • Assuming a variable is global when it's actually scoped to a function or block.
  • Confusing ReferenceError with TypeError, which occurs when a value is not of the expected type.
From our shopsCaseMorph: Type an idea, see a custom phone case in seconds, then print a one-of-one.