Closures In JavaScript - A Beginner's Guide

Profile picture for user Akash Murugesan
Associate Software Developer

Akash Murugesan

Associate Software Developer

Closures in javascript

Closures: Everything You Need To Know!

The internet today is packed with an assortment of various elucidations on what closures are and what closures in JavaScript are. Yet many beginners find it tricky to comprehend the concept. But worry no more! Because I believe that knowing the internals provides developers with a better knowledge of their tools, this article will emphasize across the board about what closures in JavaScript are, the history of closures, why we need them, the advantages, drawbacks and much more. Let’s get started!

Closures in JavaScript are a fundamental JavaScript notion that any creative programmer should be familiar with from start to finish. Closures allow callbacks, event handlers, and higher-order functions to access variables in the outer scope. They are crucial in functional programming, and hence they’re something that is frequently asked about during the JavaScript coding interview. Let’s first understand what exactly is the closures function in JavaScript.

What Are JavaScript Closures? 

Closures are one of JavaScript's and perhaps other programming languages' most powerful features. Function along with a lexical environment (scope chain), forms a bundle that is closures. In short, the function returning the other function, where that function inherits the parent function. In other words, a closure function in JavaScript allows an inner function to access the scope of an outside function. 

The Closure JavaScript definition is easy to acknowledge when the base is right. However, many find it difficult to understand and often get confused between the difference between closure and nested function in JavaScript. A nested function is a function that is written inside another function. On the other hand, even after the outer function has completed its closure, the nested functions continue to live on.

In JavaScript, a scope specifies which variables you have access to. There are two main scopes to every closure. They are:

  • Local Scope 
  • Global Scope 

Local Scope: The variables are considered to be in a local scope when they are usable only in a specific part of your code. These variables are hence also called local variables.

Global Scope: A variable is said to be defined in the global scope if it is declared outside all functions or curly braces ({}).

Now that we have looked into what closures are, let's now understand the history of closures.

History Of Closures

The history of closures is fascinating and exciting. In the olden days, lambda calculus denotes binding a variable in functions. Closures, on the other hand, were introduced in the 1960s in order to evaluate the expressions of λ-calculus. In 1964, Peter J. The closure as described by Landin is something that has an environment and a control portion, as applied to his SECD machine for evaluating expressions. Landin is attributed with coining the term closure to describe a lambda expression whose open bindings (free variables) have been closed by (or bound in) the lexical environment, resulting in a closed expression, or closure.

Now that we’ve cleared the history, let’s cover the why. Why do we need closures?

What Is The Use Of Closures In JavaScript? 

Closures in JavaScript are useful because they enable you to connect data (the lexical environment) to a function that works with it. Closures in JavaScript make a lot of meaning and sense in the functional programming world. However, we need closures for Data hiding and Encapsulation, Currying and Design Patterns. Nevertheless, closures in JavaScript can be used to store private data. That is one can archive real private data in JavaScript using closures.

Closures in javascript


What Is Lexical Scoping In JavaScript Closures?

It is a matter of fact to remember and adhere that closures in JavaScript definition have Lexical scoping with function scope. Simply put, it means that the variables defined in the parent scope are accessible to the children scope. For example, owing to lexical scoping, if I build a function and declare a variable inside it, then define another function inside the same function, I should be able to utilize that variable inside the inner function. Lexical scoping is preferable because the value of a variable may be easily determined from the code.

What Are Practical Closures In JavaScript?

Object-oriented programming allows you to associate data (the object's properties) with one or more methods, and this has apparent analogies. On the internet, there are a lot of situations where one could wish to do this. It is hence found that the majority of front-end JavaScript code is event-based. As a result, you can use a Js closure anywhere. Mostly, an object with only one method would ordinarily be used.

JavaScript Closures For Emulating Private Methods

Methods can be declared as private in programming languages such as java, which means they can only be called by other methods in the same class. Although there is no native mechanism to achieve this with JavaScript, closures can be used to imitate private functions. Private methods are helpful for more than just limiting code access. They also give you an active, effective and efficient way to accomplish your universal namespace. 

What Is A Closure Example?

Closures are not difficult to grasp, but they do necessitate a paradigm shift from other common languages. In order to learn closures, one must understand closure function in JavaScript view functions and function scope from a new perspective and should be ready to experiment and explore. Let us now understand closure in JavaScript with example.

The below-given closure example in JavaScript represents closure formed in the JavaScript memory and it consists of employee object and salaryPerEmployee. 

closure javascript


Js closure


This closure example in JavaScript code given below creates closures for every single function.

closures js


The closure example given below represents closure creation in every function, so it consists of more memory. 

closure in javascript with example


Let us now dive into the advantages and disadvantages of closures in JavaScript:

The Advantages of Closures In JavaScript

In actual fact we recognize that variables created inside a function have a local scope and can only be accessed within the function, not outside of it. The advantages of the closure function in JavaScript are

  • We can have private variables that are available even after a function task is completed by employing a closure.

  • We can store data in a separate scope and share it only when it's needed with a function closure.

The Disadvantages Of JavaScript Closures 

Closures not only offer benefits, but they also have drawbacks. There are two disadvantages of closures in JavaScript that one should be aware of while using. They are

  • Closures consume a lot of memory. Creating a function within a function causes memory duplication, which slows down the application.   

  • Closures are not garbage collected when functions are internally connected. Hence the memory cannot be garbage collected as long as the closures are active. For instance, if we utilize closure in ten locations, the memory will be held until all ten processes are completed, resulting in a JavaScript closure memory leak.

To Wind Up

The Closure is a really important notion, but it is sometimes over-explained, causing people, especially those who are new to JavaScript, to become overwhelmed and avoid it. This is the whole essence and magic of closures is that if an internal function survives longer than the parent function in which it was written, the parent function's variables will survive through the internal function that serves as a reference for them. Perhaps you've been utilizing closures without even noticing it, but if not, it’s time to give them a shot.

Want to catch up with more finest web application development insights?

Enjoy Reading :

Happy Coding!!

Article By,

Akash Murugesan,

Associate Software Developer 



Profile picture for user Akash Murugesan
Associate Software Developer

Akash Murugesan

Associate Software Developer