Skip to main content

Command Palette

Search for a command to run...

Understanding the this Keyword in JavaScript (Complete Guide with Examples)

Updated
4 min read
Understanding the this Keyword in JavaScript (Complete Guide with Examples)

JavaScript’s this keyword is one of the most confusing topics for beginners—but once you understand one simple idea, everything becomes easier:

👉 this refers to the object that is calling the function.

Let’s break it down step by step with simple examples.


🔹 What this Represents

In JavaScript, this is a special keyword that refers to the current execution context.

But instead of going deep into theory, remember this rule:

this = who is calling the function


🔹 this in Global Context

In the global scope (outside any function):

console.log(this);

In Browser:

👉 this refers to the window object

console.log(this === window); // true

In Node.js:

👉 this refers to an empty object {}


🔹 this Inside Objects

When a function is inside an object, this refers to that object.

const user = {
  name: "Raj",
  greet: function () {
    console.log(this.name);
  }
};

user.greet(); // Raj

👉 Here, user is calling greet(), so:

this → user

🔹 this Inside Functions

Normal Function (Non-Strict Mode)

function show() {
  console.log(this);
}

show();

👉 In browser:

this → window

Strict Mode

"use strict";

function show() {
  console.log(this);
}

show(); // undefined

👉 In strict mode:

this → undefined

🔹 How Calling Context Changes this

This is the MOST IMPORTANT part 🔥

Example 1: Same function, different caller

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

const user1 = { name: "Vishal", greet };
const user2 = { name: "Rahul", greet };

user1.greet(); // Vishal
user2.greet(); // Rahul

👉 The function is same, but:

Caller changes → this changes

🔹 this Can Break (Important Concept ⚠️)

const user = {
  name: "Vishal",
  greet: function () {
    console.log(this.name);
  }
};

const func = user.greet;
func(); // undefined (or error in strict mode)

👉 Why?

Because now:

Caller = global → this ≠ user

🔹 Arrow Functions and this

Arrow functions behave differently 🚨

👉 They DO NOT have their own this

const user = {
  name: "Vishal",
  greet: () => {
    console.log(this.name);
  }
};

user.greet(); // undefined

👉 Arrow functions take this from their surrounding scope.


🔹 Fixing this (bind, call, apply)

🔸 call()

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

const user = { name: "Vishal" };

greet.call(user); // Vishal

🔸 apply()

greet.apply(user);

🔸 bind()

const newFunc = greet.bind(user);
newFunc(); // Vishal

🔹 Real-Life Analogy (Easy Way to Remember)

Think of this like a phone caller ID 📞

👉 Whoever calls the function:

That person becomes "this"

🔹 Diagram Idea (Concept Visualization)

user.greet()
   ↓
Caller = user
   ↓
this → user
func()
 ↓
Caller = global
 ↓
this → window / undefined

🔹 Summary (Quick Revision)

  • this depends on how a function is called

  • In objects → this = object

  • In global → this = window (browser)

  • In strict mode → this = undefined (in functions)

  • Arrow functions → no own this

  • You can control this using call, apply, bind


🚀 Final Tip

👉 Don’t memorize rules. 👉 Just ask ONE question:

"Who is calling this function?"

That’s your answer to this.


✨ Conclusion

Understanding this is crucial for mastering JavaScript. Once you get comfortable with how calling context works, concepts like callbacks, event handlers, and classes become much easier.

Keep practicing small examples, and you'll master it quickly 🚀


More from this blog