DEV Community

Vamshi Krishna
Vamshi Krishna

Posted on

Understanding Arrow Functions vs. Normal Functions in JavaScript

JavaScript gives us different ways to write functions, and two common methods are arrow functions and normal functions (often called "function declarations" or "function expressions"). Let’s break down the key differences between them in a simple way.

1. Normal Functions

Normal functions are the traditional way of writing functions in JavaScript. You can create them using the function keyword.

Example:

function add(a, b) {
  return a + b;
}

console.log(add(2, 3)); // Output: 5
Enter fullscreen mode Exit fullscreen mode

Here, we define a function named add that takes two arguments, a and b, and returns their sum.

2. Arrow Functions

Arrow functions are a shorter way to write functions, introduced in ES6 (ECMAScript 2015). They use the => syntax.

Example:

const add = (a, b) => {
  return a + b;
};

console.log(add(2, 3)); // Output: 5
Enter fullscreen mode Exit fullscreen mode

This arrow function does the same thing as the normal function above but is more concise.

Key Differences

1.Syntax:

  • Normal Function:

     function greet(name) {
       return `Hello, ${name}!`;
     }
    
  • Arrow Function:

     const greet = (name) => {
       return `Hello, ${name}!`;
     };
    

2.this Keyword:

  • In normal functions, this refers to the object that called the function. This can change depending on how the function is invoked.
  • Arrow functions, on the other hand, do not have their own this. They inherit this from the surrounding (lexical) context.

Example:

   const person = {
     name: 'Alice',
     sayName: function() {
       console.log(this.name);
     }
   };

   person.sayName(); // Output: "Alice"
Enter fullscreen mode Exit fullscreen mode

If we used an arrow function:

   const person = {
     name: 'Alice',
     sayName: () => {
       console.log(this.name);
     }
   };

   person.sayName(); // Output: undefined
Enter fullscreen mode Exit fullscreen mode

Here, this.name is undefined because arrow functions do not have their own this.

3.Arguments Object:

  • Normal functions have access to the arguments object, which is an array-like object containing the arguments passed to the function.
  • Arrow functions do not have their own arguments object.

Example:

   function showArguments() {
     console.log(arguments);
   }

   showArguments(1, 2, 3); // Output: [1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

Arrow function:

   const showArguments = () => {
     console.log(arguments);
   };

   showArguments(1, 2, 3); // Output: ReferenceError: arguments is not defined
Enter fullscreen mode Exit fullscreen mode

4.Use Cases:

  • Normal Functions: Use when you need a function that requires its own this context or needs to access the arguments object.
  • Arrow Functions: Use for shorter functions or when you want to inherit this from the surrounding context.

Conclusion

Both arrow functions and normal functions have their place in JavaScript. Arrow functions are great for shorter, more concise code, while normal functions are better when you need more control over this or access to the arguments object. Understanding when to use each will help you write cleaner, more effective JavaScript code!

Top comments (0)