Bird
Raised Fist0
Javascriptprogramming~5 mins

Common hoisting pitfalls in Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is hoisting in JavaScript?
Hoisting is JavaScript's behavior of moving variable and function declarations to the top of their containing scope before code execution.
Click to reveal answer
beginner
Why can using var cause unexpected behavior due to hoisting?
Variables declared with var are hoisted and initialized with undefined, so accessing them before assignment returns undefined instead of an error.
Click to reveal answer
intermediate
What happens when you try to access a let or const variable before its declaration?
Accessing let or const variables before declaration causes a ReferenceError due to the temporal dead zone (TDZ).
Click to reveal answer
intermediate
How does function declaration hoisting differ from function expression hoisting?
Function declarations are fully hoisted, so you can call them before they appear in code. Function expressions assigned to variables are hoisted only as variable declarations, so calling them before assignment causes errors.
Click to reveal answer
advanced
What is a common pitfall when using var inside loops related to hoisting?
Using var inside loops hoists the variable to the function scope, causing all iterations to share the same variable, which can lead to unexpected results in closures.
Click to reveal answer
What will be the output of this code?
console.log(x); var x = 5;
AReferenceError
B5
Cnull
Dundefined
What happens if you try to access a let variable before its declaration?
AOutputs undefined
BOutputs null
CThrows ReferenceError
DOutputs 0
Which of these is fully hoisted and can be called before its declaration?
AFunction declaration
BFunction expression assigned to var
CArrow function assigned to const
DClass declaration
What is the output of this code?
for(var i=0; i<3; i++) { setTimeout(() => console.log(i), 100); }
A0 1 2
B3 3 3
Cundefined undefined undefined
DReferenceError
Which keyword avoids hoisting pitfalls by block-scoping variables?
ABoth B and D
Blet
Cfunction
Dconst
Evar
Explain what hoisting is and describe a common pitfall when using var in JavaScript.
Think about how JavaScript moves declarations and what happens if you use a variable before assigning it.
You got /4 concepts.
    Describe the difference between function declarations and function expressions in terms of hoisting.
    Consider which functions you can call before they appear in the code.
    You got /4 concepts.

      Practice

      (1/5)
      1. What happens when you access a var variable before its declaration in JavaScript?
      easy
      A. It returns undefined because var is hoisted and initialized with undefined.
      B. It throws a ReferenceError because the variable is not defined yet.
      C. It returns the value assigned later in the code.
      D. It causes a SyntaxError.

      Solution

      1. Step 1: Understand var hoisting behavior

        Variables declared with var are hoisted to the top and initialized with undefined.
      2. Step 2: Access before declaration

        Accessing the variable before its declaration returns undefined instead of an error.
      3. Final Answer:

        It returns undefined because var is hoisted and initialized with undefined. -> Option A
      4. Quick Check:

        var hoisting = undefined [OK]
      Hint: var is hoisted and set to undefined before code runs [OK]
      Common Mistakes:
      • Thinking accessing var before declaration throws error
      • Confusing var with let or const hoisting
      • Assuming var is not hoisted at all
      2. Which of the following is the correct way to declare a variable that will cause a ReferenceError if accessed before declaration?
      easy
      A. x = 10;
      B. var x = 10;
      C. function x() {}
      D. let x = 10;

      Solution

      1. Step 1: Recall let hoisting

        let is hoisted but not initialized, causing a temporal dead zone.
      2. Step 2: Identify which causes ReferenceError before declaration

        Accessing let before declaration throws ReferenceError. Here, let x = 10; uses let.
      3. Final Answer:

        let x = 10; -> Option D
      4. Quick Check:

        let before declaration = ReferenceError [OK]
      Hint: let causes ReferenceError if accessed early [OK]
      Common Mistakes:
      • Thinking var causes ReferenceError before declaration
      • Confusing function declarations with variables
      • Assuming const behaves like var
      3. What is the output of the following code?
      console.log(foo());
      
      function foo() {
        return 'Hello';
      }
      
      var foo = function() {
        return 'World';
      };
      medium
      A. 'Hello'
      B. 'World'
      C. TypeError
      D. ReferenceError

      Solution

      1. Step 1: Understand function declaration hoisting

        Function declarations are fully hoisted, so foo is initially the function returning 'Hello'.
      2. Step 2: Analyze var function expression assignment

        The var foo declaration is hoisted but the assignment to function expression happens after the call, so it does not overwrite the function declaration at the time of call.
      3. Final Answer:

        'Hello' -> Option A
      4. Quick Check:

        Function declarations hoisted fully = 'Hello' [OK]
      Hint: Function declarations hoisted fully, var function expressions not [OK]
      Common Mistakes:
      • Assuming var function expression overwrites before call
      • Confusing function declaration and expression hoisting
      • Expecting TypeError or ReferenceError
      4. Identify the error in the following code and fix it:
      console.log(a);
      let a = 5;
      medium
      A. No error, outputs 5
      B. SyntaxError due to missing semicolon
      C. ReferenceError because let is accessed before declaration
      D. TypeError because a is not a function

      Solution

      1. Step 1: Recognize temporal dead zone with let

        Variables declared with let are hoisted but not initialized, causing ReferenceError if accessed before declaration.
      2. Step 2: Fix by moving declaration before usage

        Move let a = 5; before console.log(a); to avoid ReferenceError.
      3. Final Answer:

        ReferenceError because let is accessed before declaration -> Option C
      4. Quick Check:

        let before declaration = ReferenceError [OK]
      Hint: Declare let variables before use to avoid ReferenceError [OK]
      Common Mistakes:
      • Thinking let behaves like var
      • Ignoring temporal dead zone
      • Assuming missing semicolon causes error
      5. Consider this code snippet:
      console.log(typeof bar);
      var bar = 'test';
      console.log(typeof baz);
      let baz = 'hello';

      What will be the output and why?
      hard
      A. 'string' followed by 'string'
      B. 'undefined' followed by ReferenceError
      C. ReferenceError followed by 'undefined'
      D. 'undefined' followed by 'undefined'

      Solution

      1. Step 1: Analyze typeof bar with var

        var bar is hoisted and initialized with undefined, so typeof bar returns 'undefined'.
      2. Step 2: Analyze typeof baz with let

        let baz is hoisted but not initialized, accessing it before declaration causes ReferenceError, even with typeof.
      3. Final Answer:

        'undefined' followed by ReferenceError -> Option B
      4. Quick Check:

        var hoisted initialized, let TDZ causes ReferenceError [OK]
      Hint: typeof var before declaration = 'undefined', let causes ReferenceError [OK]
      Common Mistakes:
      • Assuming typeof let before declaration returns 'undefined'
      • Confusing var and let hoisting behavior
      • Expecting no error from typeof on let
      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