Bird
Raised Fist0
Javascriptprogramming~5 mins

Closures in Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a closure in JavaScript?
A closure is a function that remembers and can access variables from outside its own scope, even after the outer function has finished running.
Click to reveal answer
beginner
Why do closures remember variables from their outer function?
Because when a function is created inside another function, it keeps a reference to the outer function's variables, so it can use them later.
Click to reveal answer
intermediate
How can closures be useful in real life?
Closures help keep data private and create functions with their own memory, like counters or settings that remember past values.
Click to reveal answer
intermediate
What will the following code output and why?<br><pre>function makeCounter() {<br>  let count = 0;<br>  return function() {<br>    count += 1;<br>    return count;<br>  }<br>}<br>const counter = makeCounter();<br>console.log(counter());<br>console.log(counter());</pre>
It will output:
1
2
Because the inner function remembers the variable 'count' from makeCounter and increases it each time it is called.
Click to reveal answer
advanced
Can closures cause memory issues? Why or why not?
Yes, closures can keep variables in memory longer than needed if not managed carefully, because they hold references to outer variables even after the outer function ends.
Click to reveal answer
What does a closure allow a function to do?
AChange the global variables directly
BRun faster than normal functions
CAccess variables from its outer function even after the outer function has finished
DCreate new variables in the global scope
In this code, what will be logged?
function outer() {
let name = 'Alice';
return function() {
console.log(name);
}
}
const inner = outer();
inner();
Anull
Bundefined
CError
D'Alice'
Which of these is NOT a benefit of closures?
AAutomatically freeing memory
BCreating private variables
CMaintaining state between function calls
DData privacy
What happens if you create multiple closures from the same outer function?
AAll closures share the same variables
BEach closure has its own separate copy of the outer variables
COnly the first closure works correctly
DClosures cannot be created multiple times
Which keyword is used to define a function that can create a closure?
Afunction
Bvar
Clet
Dconst
Explain in your own words what a closure is and why it is useful.
Think about how a function can keep some information even after it finishes.
You got /3 concepts.
    Describe a simple example where a closure helps keep track of a count or state.
    Imagine a counter that remembers how many times it was called.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is a closure in JavaScript?
      easy
      A. A function that has no parameters
      B. A function that runs only once
      C. A function that returns another function without variables
      D. A function that remembers variables from its creation context

      Solution

      1. Step 1: Understand closure definition

        A closure is a function that keeps access to variables from the place where it was created, even after that place has finished running.
      2. Step 2: Match definition to options

        A function that remembers variables from its creation context correctly describes this behavior, while others describe unrelated concepts.
      3. Final Answer:

        A function that remembers variables from its creation context -> Option D
      4. Quick Check:

        Closure = function remembering variables [OK]
      Hint: Closures remember variables from where they were made [OK]
      Common Mistakes:
      • Thinking closures are functions without parameters
      • Confusing closures with immediately invoked functions
      • Believing closures only run once
      2. Which of the following is the correct syntax to create a closure in JavaScript?
      easy
      A. function outer() { let x = 5; function inner() { return x; } }
      B. function outer() { let x = 5; return x; }
      C. function outer() { let x = 5; return function inner() { return x; } }
      D. function outer() { return function() { let x = 5; } }

      Solution

      1. Step 1: Identify closure syntax

        A closure requires an inner function that accesses variables from the outer function and is returned so it can be used later.
      2. Step 2: Check options for correct closure

        function outer() { let x = 5; return function inner() { return x; } } returns an inner function that uses outer variable x, forming a closure. Others either don't return the function or don't access outer variables correctly.
      3. Final Answer:

        function outer() { let x = 5; return function inner() { return x; } } -> Option C
      4. Quick Check:

        Return inner function accessing outer variable [OK]
      Hint: Closure needs returned inner function accessing outer variable [OK]
      Common Mistakes:
      • Not returning the inner function
      • Returning only the variable, not a function
      • Defining inner function but not using outer variables
      3. What will be the output of the following code?
      function makeCounter() {
        let count = 0;
        return function() {
          count += 1;
          return count;
        };
      }
      const counter = makeCounter();
      console.log(counter());
      console.log(counter());
      medium
      A. 1 and 2
      B. 0 and 1
      C. undefined and undefined
      D. 1 and 1

      Solution

      1. Step 1: Understand closure behavior in makeCounter

        The inner function increments count and returns it. The variable count is remembered by the closure.
      2. Step 2: Trace the calls to counter()

        First call: count = 0 + 1 = 1, returns 1. Second call: count = 1 + 1 = 2, returns 2.
      3. Final Answer:

        1 and 2 -> Option A
      4. Quick Check:

        Closure keeps count incrementing: 1, 2 [OK]
      Hint: Closure keeps variable state between calls [OK]
      Common Mistakes:
      • Thinking count resets each call
      • Expecting output 1 and 1
      • Confusing closure with global variable
      4. Find the error in this closure example:
      function createFuncs() {
        let funcs = [];
        for (var i = 0; i < 3; i++) {
          funcs.push(function() { return i; });
        }
        return funcs;
      }
      const functions = createFuncs();
      console.log(functions[0]());
      console.log(functions[1]());
      medium
      A. All functions return 3 instead of 0, 1, 2
      B. Syntax error due to missing semicolons
      C. Functions return undefined
      D. Functions throw a ReferenceError

      Solution

      1. Step 1: Identify loop variable scope

        The loop uses var i, which is function-scoped, so all inner functions share the same i.
      2. Step 2: Understand closure captures final i value

        After loop ends, i is 3. All functions return 3, not 0, 1, 2 as expected.
      3. Final Answer:

        All functions return 3 instead of 0, 1, 2 -> Option A
      4. Quick Check:

        var in loop causes shared i = 3 [OK]
      Hint: var in loop shares variable; use let for block scope [OK]
      Common Mistakes:
      • Assuming each function captures separate i
      • Thinking semicolons cause error
      • Expecting ReferenceError or undefined
      5. How can you fix the following code so each function remembers its own value of i?
      function createFuncs() {
        let funcs = [];
        for (var i = 0; i < 3; i++) {
          funcs.push(function() { return i; });
        }
        return funcs;
      }
      hard
      A. Use var but call the function immediately
      B. Change var to let in the for loop declaration
      C. Return i directly instead of a function
      D. Declare i as a global variable

      Solution

      1. Step 1: Understand block scope with let

        Using let in the for loop creates a new binding of i for each iteration, so closures capture different i values.
      2. Step 2: Compare with var behavior

        var is function-scoped, so all closures share the same i. Changing to let fixes this by giving each iteration its own i.
      3. Final Answer:

        Change var to let in the for loop declaration -> Option B
      4. Quick Check:

        let in loop creates separate i per iteration [OK]
      Hint: Use let in loops to create separate closure variables [OK]
      Common Mistakes:
      • Trying to fix by making i global
      • Returning i instead of function
      • Using var with immediate call but misunderstanding closures
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard