Understanding `this` and Arrow Functions in JavaScript
Shifa

Shifa @shifa_2

About: I'm a Computer Science student passionate about Data Structures & Algorithms and software development. I enjoy solving complex problems, building efficient solutions, and constantly learning new tech

Joined:
Apr 12, 2025

Understanding `this` and Arrow Functions in JavaScript

Publish Date: May 16
6 4

In JavaScript, the this keyword is one of the most powerful yet often misunderstood concepts. Its behavior can vary depending on how a function is declared and invoked. This article explains how this works, how arrow functions affect it, and how to use both effectively in modern JavaScript.

The this Keyword in JavaScript

The value of this in JavaScript refers to the object that is executing the current function. It is determined by the context in which a function is called, not where it is defined.

Regular Function and this

In regular functions, the value of this depends on the call site (how the function is called).

function sayHello() {
  console.log(this.name);
}

const person = {
  name: 'Alice',
  greet: sayHello
};

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

Here, the function sayHello is called as a method of the person object, so this refers to person.

However, if we call the function directly without an object context:

sayHello(); // Output: undefined (or window.name in non-strict mode)
Enter fullscreen mode Exit fullscreen mode

In this case, this refers to the global object (window in browsers) or undefined in strict mode.

this Inside a Callback

One common pitfall with regular functions is the loss of context inside callbacks.

function Counter() {
  this.count = 0;

  setInterval(function () {
    this.count++;
    console.log(this.count);
  }, 1000);
}

new Counter();
Enter fullscreen mode Exit fullscreen mode

In this example, this inside setInterval does not refer to the instance of Counter, but to the global object. This results in NaN or an error because this.count is not defined.

Arrow Functions and this

Arrow functions behave differently. They do not have their own this. Instead, they inherit this from the enclosing lexical context at the time they are defined.

function Counter() {
  this.count = 0;

  setInterval(() => {
    this.count++;
    console.log(this.count);
  }, 1000);
}

new Counter();
Enter fullscreen mode Exit fullscreen mode

In this version, the arrow function captures this from the Counter function, so this.count refers to the correct object.

Arrow Functions in Object Methods

Arrow functions are not suitable as object methods if you rely on this referring to the object itself.

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

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

Here, this does not refer to person, but to the outer lexical scope, which might be the global object or undefined in strict mode.

Summary

  • Regular functions have dynamic this based on how they are called.
  • Arrow functions inherit this from the lexical scope in which they are defined.
  • Use arrow functions to retain context, especially for callbacks and closures.
  • Avoid using arrow functions as object methods when you need access to the object via this.

Understanding the nuances of this and how arrow functions change its behavior is essential for writing clean, predictable JavaScript code. By choosing the right function type for the job, you can avoid many common bugs and improve the readability of your code.


Comments 4 total

  • Ho3ein
    Ho3einMay 16, 2025

    i was waiting for this post.
    Awesome

    • Shifa
      ShifaMay 17, 2025

      thanks a lot i am glad you find it useful :)

  • Md Asaduzzaman Atik
    Md Asaduzzaman AtikMay 17, 2025

    nowadays it's rare for me to been in a situation where i have to use this. really good too see how you keep blogging regularly

    • Shifa
      ShifaMay 17, 2025

      Totally agree with you like ES6 modules and modern tooling, IIFEs aren't as common in everyday code. Still, it's always good to revisit these foundational concepts. And thank you! Writing regularly helps me stay sharp and connected with the brilliant community members like you

Add comment