Function Declaration vs. Function Expression: Understanding the Differences in JavaScript
Yassine Hamadou Mounkaila
Software Engineer | Bilingual - French & English | Fellow @TheRoom
Understanding the distinction between a JavaScript function declaration and a function expression is essential for developers.
Both ways of building a function have benefits and drawbacks, so picking the best one can help you save time and avoid headaches down the road.
Let's start by defining the terms "function declaration" and "function expression."
The "function" keyword is used to define a function, which is then followed by the function name, the parameters (in parentheses), and the body of the function (in curly braces).
Example:
function sayHi(name) {
? console.log(`Hi, ${name}!`);
}
A function expression, on the other hand, is a means to create a function as a value that is often assigned to a variable.
Here's an illustration:
const sayHi = function(name) {
console.log(`Hello, ${name}!`);
};
Let's now examine how the two differ from one another.
Hoisting
Hoisting is one of the primary distinctions between function declarations and function expressions.
Hoisting in JavaScript refers to the action of elevating variable and function declarations to the top of the active scope.
Function declarations can be called before they are defined in your code because they are hoisted.
For instance:
领英推荐
Even though the "sayHi" function is called before it is defined, the code will still function since it is elevated to the top of the scope before execution.
On the other hand, function expressions are not hoisted, and as a result, they cannot be called before they are defined.
Due to the fact that the "sayHi" function is assigned to a variable that is not hoisted before execution, it cannot be called before its definition, and as a result, this code will not run.
Naming
Another key difference between function declarations and function expressions is their naming. A function declaration has a name, which is used to refer to it inside the body, like in the case of a recursive function, and outside of it.
For example:
On the other hand, a function expression is created without a name by default. However, we can give it a name using a named function expression, as in:
In conclusion, function declarations and expressions both have their benefits and drawbacks. Although function declarations are hoisted and have a name, they can also clutter the global namespace, where all variables and functions exist in Javascript, which can cause naming conflicts if you define another function or variable with the same name.
Function expressions, however, are more flexible and can be utilized as values because they are not hoisted and do not come with names by default.
As a developer, it's important to understand the differences between the two and choose the right one for your specific use case. By doing so, you can write more efficient and maintainable code.