What Are Closures?

A closure is a function in JavaScript that retains access to variables from its outer (enclosing) function’s scope even after the outer function has finished executing. This means that closures “enclose” their own scope and capture variables from the surrounding context. They create a self-contained environment, which is particularly useful for data encapsulation and maintaining state.

A closure is a feature of JavaScript that allows inner functions to access the outer scope of a function.

The Anatomy of a Closure

To understand closures better, let’s break down their key components:

  • Outer Function (Parent Function): Closures are created within an outer function. This function defines the scope in which the closure operates.
  • Inner Function (Child Function): The inner function is the closure itself. It’s defined within the outer function and captures variables from the outer function’s scope.
  • Lexical Scope: Closures have access to variables from their parent function due to lexical scoping. Lexical scoping means that the scope of a variable is determined by its location within the source code.

Creating Closures

Closures are typically created when an inner function is returned from an outer function. Here’s a simple example:

  function outer() {
    let outerVar = 'I am from the outer function!';
    function inner() {

    return inner; // Return the inner function as a closure

const closure = outer();
closure(); // Outputs: "I am from the outer function!"

In this example, the inner function is returned from the outer function, forming a closure. The closure variable retains access to outerVar even after outer has finished executing.

Practical Uses of Closures

Closures are powerful and have numerous real-world applications, including:

1. Data Privacy: Closures can be used to encapsulate data, making it inaccessible from outside the closure. This helps prevent unintended modifications to data.

2. Function Factories: Closures are often used to create specialized functions, like factory functions that generate other functions with specific behavior.

3. Callbacks: They are frequently used in event handling and asynchronous programming to maintain context and access variables.


In this blog post, we’ve explored what closures are, how they work, and their practical applications. By mastering closures, you’ll unlock a powerful tool for building robust JavaScript applications.

Additional Resources

1. MDN Web Docs: Closures
2. JavaScript Closures Explained Simply


Leave a Comment