JavaScript Interview Questions
  • JavaScript Interview Questions
  • Contact
  • Introduction
  • Question 1
  • Question 2
  • Question 3
  • Question 4
  • Question 5
  • Question 6
  • Question 7
  • Question 8
  • Question 9
  • Question 10
  • Question 11
  • Question 12
  • Question 13
  • Question 14
  • Question 15
  • Question 16
  • Question 17
  • Question 18
  • Question 19
  • Question 20
  • Question 21
  • Question 22
  • Question 23
  • Question 24
  • Question 25
  • Question 26
  • Question 27
  • Question 28
  • Question 29
  • Question 30
  • Question 31
  • Question 32
  • Question 33
  • Question 34
  • Question 35
  • Question 36
  • Question 37
  • Question 38
  • Question 39
  • Question 40
  • Question 41
  • Question 42
  • Question 43
  • Question 44
  • Question 45
  • Question 46
  • Question 47
  • Question 48
  • Question 49
  • Question 50
  • Question 51
  • Question 52
  • Question 53
  • Question 54
  • Question 55
  • Question 56
  • Question 57
  • Question 58
  • Question 59
  • Question 60
  • Question 61
  • Question 62
  • Question 63
  • Question 64
  • Question 65
  • Question 66
  • Question 67
  • Question 68
  • Question 69
  • Question 70
  • Question 71
  • Question 72
  • Question 73
  • Question 74
  • Question 75
  • Question 76
  • Question 77
  • Question 78
  • Question 79
  • Question 80
  • Question 81
  • Question 82
  • Question 83
  • Question 84
  • Question 85
  • Question 86
  • Question 87
  • Question 88
  • Question 89
  • Question 90
  • Question 91
  • Question 92
  • Question 93
  • Question 94
  • Question 95
  • Question 96
  • Question 97
  • Question 98
  • Question 99
  • Question 100
  • Epilogue
Powered by GitBook
On this page
  • Question
  • Answer

Question 49

Question

Can you explain how to implement a singleton pattern in JavaScript using closures?

Answer

The singleton pattern ensures that only one instance of a class is ever created. Here's how to implement it effectively in JavaScript using closures:

const Singleton = (function() {
  let instance; 

  function init() {
    console.log("Singleton instance created!");
    // Initialize any properties or methods here if needed
  }

  return function() { // Returned function acts as the constructor
    if (!instance) {
      instance = {}; // Create the singleton object
      init();             // Call initialization only once
    }
    return instance; 
  };
})();

// Accessing and using the singleton:
const firstInstance = Singleton(); 
const secondInstance = Singleton(); 

console.log(firstInstance === secondInstance); // Output: true (They both reference the same object)

Explanation:

  1. Immediately Invoked Function Expression (IIFE): The code is wrapped in an IIFE (function() { ... })(). This creates a private scope, preventing accidental external access to variables within the closure.

  2. instance Variable: A let variable instance is declared inside the IIFE. It's initially undefined and will hold the singleton instance once created.

  3. init() Function: This function (optional) initializes any properties or methods that your singleton needs when it's first created.

  4. Returned Constructor-like Function: The IIFE returns another function. This returned function acts as the constructor for the singleton pattern.

  5. Singleton Logic: Inside the returned function:

    • if (!instance) checks if an instance already exists. If not, it creates a new empty object (instance) and calls init() to initialize it.

    • In either case, it returns the existing or newly created instance.

Benefits of Closures for Singleton:

  • Encapsulation: The closure hides the internal workings of the singleton from outside code, making it more robust.

  • Controlled Access: You can explicitly control how the singleton is accessed through the returned constructor function.

PreviousQuestion 48NextQuestion 50

Last updated 9 months ago