Understanding JavaScript Closures: Dynamic Scope vs. Lexical Scope

Exploring How Closures Behave in JavaScript

Max N
3 min readMar 20, 2024

When it comes to understanding JavaScript, grasping the concept of closures is crucial. Closures play a significant role in the language’s behavior, especially concerning scope.

In JavaScript, closures are often discussed in the context of two main types of scope: dynamic scope and lexical scope. Let’s delve into what these terms mean and how they impact closures in JavaScript.

Dynamic Scope

Dynamic scope refers to a method of determining the scope of a variable based on the runtime context of the function invocation. In other words, when a function is executed, it looks for variables in the calling scope, rather than where the function is defined.

Consider the following code snippet:

let name = "Global";

function greet() {
console.log("Hello, " + name + "!");
}

function sayHello() {
let name = "Local";
greet();
}

sayHello(); // Output: Hello, Global!

In dynamic scoping, greet() would look for the variable name in the scope where it is called. In this case, it doesn't find name inside sayHello(), so it goes up to the global scope where name is defined as "Global".

--

--

Max N

A writer that writes about JavaScript and Python to beginners. If you find my articles helpful, feel free to follow.