DEV Community

Shashank Soni
Shashank Soni

Posted on • Updated on

Understanding 'this' in Javascript

The this keyword is an extremely important concept to understand in Javascript ,and many beginners, like me, find it difficult to understand.

this keyword/variable is a special variable that is created for every execution context(the 'environment' a function executes in).

So what is stored in 'this' keyword ?

In General terms , the this keyword will always take the value of the owner of the function in which the 'this' keyword is used.
or we can say that it points to the owner of the function.

Which means the value of this keyword is not static, it depends on how the function is actually called, and its value is only assigned when the function is actually called.

let's analyze different ways in which function can be called

1. As a Method

means as a function attached to an object.
When we call a method, the this keyword inside that method will simply point to the object in which the method is called. Or in other words, it points to the object that is calling the method.
Ex.

const shashank = {
    name : 'shashank',
    year : 1998,
    findAge: function (){
        console.log(this) // this = shashank object 
        return 2022 - this.year;
    }
}

shashank.findAge(); // 24 
Enter fullscreen mode Exit fullscreen mode

here the value of this keyword inside findAge method is shashank object, because shashank object is calling this method.

2. Simple Function Call

means not as a method & not attached to any object.
In this case the this keyword will be undefined (Only in Strict Mode),
if you're not using 'strict mode'( which you should not be doing), the this keyword will simply point to global object - meaning the window object,
(another good reason to use 'strict mode' )

function findUserAge () {
    console.log(this)
}
findUserAge();
Enter fullscreen mode Exit fullscreen mode

simple function call

the reason for getting undefined in second line is because function findUserAge() is not returning any value,

'use strict'
function findUserAge () {
    console.log(this)
}
findUserAge();
Enter fullscreen mode Exit fullscreen mode

when using strict mode
the reason for getting two undefined is because we are using strict mode so this is undefined and in second line its because function findUserAge() is not returning any value,

3. Arrow Function.

Arrow function do not get their own this keyword , if you use this in an arrow function it will simply be the this keyword of the surrounding function ( or parent function)
In technical terms this is called the lexical this keyword because it simply gets picked up from the outer lexical scope of the arrow function.

const shashank = {
    name : 'shashank',
    year : 1998,
    findAge: () => {
        console.log(this) // Window object
        return 2022 - this.year;
    }
}

shashank.findAge(); // NaN ( Not a Number)
Enter fullscreen mode Exit fullscreen mode

4. Function is called as an Event Listener

Then the this keyword will always point to the DOM element , that the handler function is attached to

What is Not the this keyword

this does not point to the function itself and also not the variable environment of the function

There are also some other ways to call a function using call apply & bind method, calling the function using these three methods is called explicit binding .

Summary

Method this = Object that is calling the method
Simple Function Call in strict mode this = undefined, otherwise this = window object
Arrow Function this = surrounding of function , also called lexical this
Event Listener DOM element , where the handler is attached

Top comments (0)