In my previous blog, I introduced you to the basics of function declaration and function expression in JavaScript. In this article, we will answer the following questions:
- Why do we need a function expression ?
- What is the difference between the two ?
Why do we need a function expression when we have function declaration ?
One of the areas where this can be extremely useful is when you want to pass a function as a parameter to another function and return a function from another function. Let us consider the code below :
function callbackRef(callback) {
callback();
}
callbackRef(function printHello(){
console.log('Hello');
});
callbackRef(function printHowdy(){
console.log('Howdy');
});
The output of the above is Hello Howdy. To break this down, Lines 6 and 10 call the function callbackRef and pass the entire function as a parameter to the function callbackRef. This is accepted by the parameter callback and then we finally execute the function by : callback(). This is the same as function expression where we say :
var callback = function (){
}
callback();
Using function references in the way mentioned above, we can compose and add dynamic behavior. Another use of the function expression is used to create powerful design pattern called the Module Design Pattern which I will explain in another blog.
What is the difference between a function declaration and function expression ?
In JavaScript we can do the following :
printToConsole();
function printToConsole(){
console.log('hello');
}
To our suprise, the program runs fine and it prints hello even if the function is called before it has been declared. The reason behind this is a concept called hoisting. The English meaning of the word hoisting is something that is raised. Applying this to the function declaration, function declaration is hoisted. What does this mean ?
Mental Model:
//Imagine the function above to be picked up like this :
function printToConsole(){
console.log('hello');
}
printToConsole();
A simple mental model to understand this is to imagine the function declaration to be hoisted(picked up) in it’s corresponding scope. Now with this understanding, I hope it is clear why the function runs successfully.
Now consider the same example using function expression :
pToC();
var pToC = function printToConsole(){
console.log('hello');
}
I have used function expression here instead of function declaration. What do you think happens here ? Does it run successfully ?
Well, it does not. It doesn’t run but we also get the following error :
“error”
“ReferenceError: pToC is not defined
In case of function expression , there is no hoisting. As the function expression in not raised up, pToC() throws an error.
Conclusion
The main difference between function declaration and function expression in JavaScript is called hoisting. This difference is more at a conceptual level.
I will dig deeper into this concept of hoisting in my next blog.
One thought on “Function declaration vs Function expression in JavaScript”