Function hoisting means JavaScript moves function declarations to the top of their scope before code runs, so you can call functions before they appear in the code.
Click to reveal answer
intermediate
How does hoisting differ between function declarations and function expressions?
Function declarations are fully hoisted, so you can call them before they appear. Function expressions are not hoisted the same way; if assigned to a variable, only the variable declaration is hoisted, not the assignment.
Click to reveal answer
beginner
What happens if you call a function expression before it is defined?
If you call a function expression before it is assigned, you get a TypeError because the variable is hoisted but undefined at that point.
Click to reveal answer
beginner
Example: What will this code output?
<pre>console.log(greet());
function greet() { return 'Hello!'; }</pre>
It will output 'Hello!' because the function declaration 'greet' is hoisted, so it exists before the console.log runs.
Click to reveal answer
intermediate
Example: What will this code output?
console.log(sayHi());
var sayHi = function() { return 'Hi!'; };
It will cause a TypeError because 'sayHi' is hoisted as a variable but is undefined when called, so you cannot call it as a function yet.
Click to reveal answer
What does function hoisting allow you to do in JavaScript?
APrevent functions from being overwritten
BUse variables before declaring them
CCall functions before they are declared
DAutomatically run functions on page load
✗ Incorrect
Function hoisting moves function declarations to the top, so you can call them before their code appears.
Which of these is fully hoisted in JavaScript?
AFunction declaration
BFunction expression assigned to var
CArrow function assigned to let
DClass declaration
✗ Incorrect
Function declarations are fully hoisted with their body; function expressions and arrow functions are not.
What error occurs if you call a function expression before it is assigned?
AReferenceError
BTypeError
CSyntaxError
DNo error
✗ Incorrect
Calling an undefined variable as a function causes a TypeError.
Given this code, what will happen?
console.log(foo());
var foo = function() { return 'bar'; };
A'bar' is printed
Bundefined is printed
CReferenceError: foo is not defined
DTypeError: foo is not a function
✗ Incorrect
Variable 'foo' is hoisted but undefined at the call, so calling it causes a TypeError.
Which statement about function hoisting is true?
AOnly function declarations are hoisted, not function expressions
BBoth function declarations and expressions are fully hoisted
CFunction expressions are hoisted before declarations
DHoisting only applies to variables
✗ Incorrect
Only function declarations are fully hoisted; function expressions are not.
Explain function hoisting and how it affects calling functions before their definition.
Think about what JavaScript does before running your code.
You got /4 concepts.
Describe the difference in hoisting behavior between a function declaration and a function expression assigned to a variable.
Consider what happens to the variable and the function code separately.
You got /4 concepts.
Practice
(1/5)
1. Which statement best describes function hoisting in JavaScript?
easy
A. Function declarations are hoisted and can be called before they are defined.
B. Function expressions are hoisted and can be called before assignment.
C. Variables declared with let are hoisted like functions.
D. Arrow functions are hoisted like function declarations.
Solution
Step 1: Understand hoisting for function declarations
Function declarations are moved to the top of their scope, so they can be called before their definition in code.
Step 2: Compare with function expressions and other types
Function expressions and arrow functions are not hoisted in the same way; they cannot be called before assignment.
Final Answer:
Function declarations are hoisted and can be called before they are defined. -> Option A
Quick Check:
Function declarations hoisted = C [OK]
Hint: Only function declarations are hoisted fully [OK]
Common Mistakes:
Thinking function expressions are hoisted like declarations
Confusing variable hoisting with function hoisting
Assuming arrow functions are hoisted
2. Which of the following is the correct syntax to declare a function that will be hoisted?
easy
A. function myFunc() { return 1; }
B. var myFunc = () => 1;
C. let myFunc = () => 1;
D. const myFunc = function() { return 1; };
Solution
Step 1: Identify function declaration syntax
Function declarations use the function keyword followed by the function name and body.
Step 2: Check other options for hoisting behavior
Options A, B, and C are function expressions or arrow functions assigned to variables, which are not hoisted as functions.
Final Answer:
function myFunc() { return 1; } -> Option A
Quick Check:
Function declaration syntax = D [OK]
Hint: Only function declarations use 'function name()' syntax [OK]
Common Mistakes:
Confusing function expressions with declarations
Assuming arrow functions are hoisted
Using variable assignment syntax for hoisted functions
3. What will be the output of the following code?
console.log(foo());
function foo() {
return 'Hello';
}
console.log(bar());
var bar = function() {
return 'World';
};
medium
A. SyntaxError
B. ReferenceError for bar
C. 'Hello' followed by 'World'
D. 'Hello' followed by TypeError
Solution
Step 1: Analyze the call to foo()
The function foo is a declaration and hoisted, so foo() returns 'Hello'.
Step 2: Analyze the call to bar()
bar is a variable assigned a function expression. The variable is hoisted but initialized as undefined at the time of the call, so calling bar() causes a TypeError.
Final Answer:
'Hello' followed by TypeError -> Option D
Quick Check:
Function declaration hoisted, function expression not initialized = A [OK]
Hint: Function declarations hoisted, expressions not initialized [OK]
Common Mistakes:
Expecting both functions to run without error
Confusing ReferenceError with TypeError
Assuming variable functions are hoisted fully
4. Consider the code below. It throws an error. What is the fix?
console.log(add(2, 3));
const add = function(a, b) {
return a + b;
};
medium
A. Move the console.log after the function expression.
B. Use var add instead of const add.
C. Change const add to function add declaration.
D. Wrap the function expression in parentheses.
Solution
Step 1: Identify why error occurs
The variable add is declared with const and assigned a function expression. It is not hoisted as a function, so calling it before assignment causes a ReferenceError.
Step 2: Fix by using function declaration
Changing to a function declaration function add(a, b) hoists the function, allowing calls before its definition.
Final Answer:
Change const add to function add declaration. -> Option C
Quick Check:
Function declarations hoisted, expressions not [OK]
Hint: Use function declarations to call before definition [OK]
Common Mistakes:
Assuming var fixes hoisting for function expressions
Thinking moving console.log is the only fix
Trying to wrap function expression in parentheses
5. You want to organize your code so that helper functions can be called anywhere in the file without errors. Which approach best uses function hoisting to achieve this?
hard
A. Assign all helper functions to const variables at the top of the file.
B. Use function declarations anywhere; they are hoisted to the top automatically.
C. Declare all helper functions using function declarations at the bottom of the file.
D. Wrap helper functions in arrow functions assigned to let variables.
Solution
Step 1: Understand hoisting behavior for function declarations
Function declarations are hoisted to the top of their scope, so they can be called anywhere in the file regardless of their position.
Step 2: Compare with other approaches
Assigning functions to variables (const or let) does not hoist the function body, so calls before assignment cause errors.
Final Answer:
Use function declarations anywhere; they are hoisted to the top automatically. -> Option B
Quick Check:
Function declarations hoisted anywhere = A [OK]
Hint: Function declarations can be called anywhere due to hoisting [OK]
Common Mistakes:
Thinking function expressions are hoisted
Placing function declarations only at bottom
Using arrow functions expecting hoisting
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.