JavaScript THIS Keyword

What does JavaScript's `this` keyword really point to? Explore its mysterious behavior and see!

javascript-this-keyword

Understanding the JavaScript this Keyword

The this keyword in JavaScript can be tricky to understand. It behaves differently depending on where it is used. Let's explore how this behaves in different contexts.

this Inside Global Scope

When this is used alone in the global scope, it refers to the global object (the window object in browsers).

console.log(this); // window

Here, this.name is the same as window.name.

this Inside Function

When this is used in a function, it refers to the global object (the window object in browsers).

function greet() {
    // this inside function
    // this refers to the global object
    console.log(this);
}

greet(); // Window (global object)

this Inside Constructor Function

In JavaScript, constructor functions are used to create objects. When a function is used as a constructor function, this refers to the object inside which it is used.

function Person() {
    this.name = 'Jack';
    console.log(this);
}

let person1 = new Person();
console.log(person1.name); // Jack

// Output
// Person {name: "Jack"}
// Jack

this Inside Object Method

When this is used inside an object's method, this refers to the object it lies within.

const person = {
    name: 'Jack',
    age: 25,
    // this refers to the object itself
    greet() {
        console.log(this);
    }
};

person.greet(); 

// Output
// {name: "Jack", age: 25, greet: ƒ}
// Jack

this Inside Inner Function

When you access this inside an inner function (inside a method), this refers to the global object.

const person = {
    name: 'Jack',
    age: 25,
    greet() {
        // this refers to the object itself
        console.log(this);
        
        function innerFunc() {
            // this refers to the global object
            console.log(this.age);
        }
        
        innerFunc();
    }
};

person.greet(); 

// Output
// {name: "Jack", age: 25, greet: ƒ}
// undefined

this Inside Arrow Function

Inside an arrow function, this refers to the parent scope.

const greet = () => {
    console.log(this);
};

greet(); // Window (global object)

When you use this inside an arrow function, it refers to its parent scope object.

const greet = {
    name: 'Jack',
    // method
    hi: () => console.log(this.name)
};

greet.hi(); // undefined

// Here, `this.name` inside the `hi()` function
// refers to the global object, not `greet` object.

You can also use the arrow function to solve the issue of having undefined when using a function inside a method. Here, innerFunc() is defined using the arrow function. It takes this from its parent scope. Hence, this.age gives 25.

const person = {
    name: 'Jack',
    age: 25,
    greet() {
        console.log(this);
        
        const innerFunc = () => {
            console.log(this.age);
        };
        
        innerFunc();
    }
};

person.greet(); 

// Output
// {name: "Jack", age: 25, greet: ƒ}
// 25

Follow Us:

Stay updated with our latest tips and tutorials by subscribing to our YouTube Channel.


DevTools99

Developer Co-Team

Let us make it easier for developers throughout the world to breathe. Let's keep things simple. Let's take it easy.