Understanding Undefined vs. Not Defined in JavaScript, Memory Allocation, and Execution Phases

Rehmat Sayany
2 min readAug 1, 2023

--

When working with JavaScript, understanding the lifecycle of your code and the difference between undefined and not defined can be crucial. These concepts directly impact memory allocation and can potentially cause confusing scenarios if not understood correctly.

Execution Phases in JavaScript

To comprehend these concepts, we first need to understand that JavaScript code execution happens in two phases: the compilation phase (also known as the creation phase) and the execution phase.

Compilation Phase

During the compilation phase, JavaScript does not execute any code. Instead, it scans through the entire code to identify all the variable and function declarations. For each variable it encounters, JavaScript allocates memory, but it doesn’t assign a value yet. Instead, it assigns a special placeholder value: undefined.

Execution Phase

After the compilation phase, the execution phase begins. Now, JavaScript starts executing the code line by line. Whenever it encounters a variable assignment, it replaces the undefined value with the actual value.

What is undefined in JavaScript?

In JavaScript, undefined is a predefined global variable that represents the value assigned to a variable during the compilation phase if no other value has been assigned to it.

let testVar;
console.log(testVar); // Output: undefined

In the above code, we’ve declared a variable testVar but haven't assigned a value to it. So, when we log in, the output is undefined. Memory has been allocated to testVar during the compilation phase.

What does not defined mean in JavaScript?

On the other hand, not defined in JavaScript means that the variable hasn't been declared at all. Accessing such variable results in a ReferenceError.

Here’s an example:

console.log(testVar); // Output: ReferenceError: testVar is not defined

In this case, we’re attempting to log a variable testVar that was never declared, resulting in a ReferenceError. No memory has been allocated for testVar, since it was never declared.

The Key Difference

The primary distinction between undefined and not defined is:

  • A variable that has been declared but not assigned a value is undefined.
  • A variable that has not been declared at all is not defined.

Conclusion

The states of undefined and not defined in JavaScript are fundamental concepts tied to the language's two-phase execution model. Understanding these states and the underlying memory management will help you avoid common pitfalls and debug your JavaScript code more effectively. Always ensure your variables are declared (so memory is allocated) and defined (assigned a value) to prevent unexpected behaviors.

--

--

Rehmat Sayany
Rehmat Sayany

Written by Rehmat Sayany

Full Stack developer @westwing passionate about NodeJS, TypeScript, React JS and AWS.

Responses (1)