Arrow Function vs Regular Function in JavaScript
Yeah, everyone already knows the syntax is different. No need to waste time on that.
Let’s look at what actually matters — how they behave differently.
1. arguments
Regular functions come with this built-in thing called arguments
object. Even if you don’t define any parameters, you can still access whatever got passed when the function was called.
Arrow functions? Nope. No arguments
object. Try using it, and it’ll just throw an error.
Regular function:
function test() {
console.log(arguments);
}
test(1, "hello world", true);
// o/p
// { '0': 1, '1': 'hello world', '2': true }
Arrow function:
const test = () => {
console.log(arguments);
};
test(1, "hello world", true); // Throws ReferenceError
2. return
Arrow functions have implicit return but regular functions don't.
i.e We can return the result automatically if we write it in a single line , inside a parenthesis in arrow functions. Regular functions always require the return
keyword.
Regular function:
function add(a, b) {
const c = a + b;
}
console.log(add(5, 10)); // o/p : undefined
Arrow function:
const add = (a, b) => (a + b);
console.log(add(5, 10)); // o/p : 15
3. this
Arrow functions do not have their own this binding. Instead, they lexically inherit this from the surrounding (parent) scope at the time of definition. This means the value of this inside an arrow function is fixed and cannot be changed using .call(), .apply(), or .bind().
Regular functions, on the other hand, have dynamic this binding — it depends on how the function is invoked. When called as a method, this refers to the object; when called standalone, this can be undefined (in strict mode) or refer to the global object (in non-strict mode).
Because of this behavior, arrow functions are commonly used in cases where you want to preserve the outer this context, such as in callbacks or within class methods that rely on this from the class instance.
Regular function :
const obj = {
name: "Titas",
sayHi: function () {
console.log(this.name);
}
};
obj.sayHi(); // o/p : Titas
Arrow function :
const obj = {
name: "Titas",
sayHi: () => {
console.log(this.name);
}
};
obj.sayHi(); // o/p : undefined
print("Titas signing out !")