JavaScript
  • JavaScript Introduction
  • JS Engine
  • V8 Engine
  • First-class function
  • Optimized Code
  • Call Stack & Memory heap
  • Single Thread
  • JavaScript RunTime
  • Nodejs
  • Context and Environment
  • Hoisting
  • Functions
  • Arguments
  • Variables
  • Scope
  • IIFE
  • this
  • call(), apply() and bind()
  • currying
  • Types
  • Type Coercion
  • Functions as Object
  • HOF (Higher Order Function)
  • Two pillars of Javascript
  • Closures
  • Prototypal Inheritance
  • OOP and FP
  • OOP
    • 4 principles of OOP
  • FP
    • Pure function
    • Imperative vs Declarative
    • Immutability
    • HOF and Closures
    • Currying
    • Partial Application
    • Compose and Pipe
  • Composition vs Inheritance
  • OOP vs FP
  • JS working
  • Promises
  • Async Await
  • ES5 - ECMAScript 2009
  • ES6 - ECMAScript 2015
  • ES7 - ECMAScript 2016
  • ES8 - ECMAScript 2017
  • ES9 - ECMAScript 2018
  • ES10 - ECMAScript 2019
  • ES11 - ECMAScript 2020
  • ES12 - ECMAScript 2021
  • JOB Queue
  • Promises Execution
Powered by GitBook
On this page

Was this helpful?

Closures

Closures are the combination of function and lexical scope.

Closure allows the function to access the variables from the closing scope after leaving its scope in which it was declare.

Closure is a function that return a function(HOF).

Ex:
const a = () => {
    let grangpa = 'grandpa';
    return function b() {
        let father = 'father';
        return function c() {
            let son = 'son';
            return `${grangpa} > ${father} > ${son}`;
        }
    };
};

const one = a(); // [Function b]
const two = one(); // [Function c]
const three = two(); // grangpa > father > son

When the function a is executing grandpa variable is created in its variable environment. After the execution completed, before removing the variables it will checks for its reference in its child functions. If it is exist in its child it will not be removed. So it can be accessed by its child functions.

PreviousTwo pillars of JavascriptNextPrototypal Inheritance

Last updated 5 years ago

Was this helpful?