KoderSolution Logo
HomeArticlesTutorialsForumAI LabRun Code
KoderSolution Logo

The world’s most advanced technical ecosystem for modern software engineers. Learn, build, and grow with next-generation developer tools and resources.

Engineering Newsletter

Join 100,000+ engineers receiving curated high-signal content weekly.

Platforms

  • Technical Articles
  • Interactive Tutorials
  • AI Coding Lab
  • Developer Forum
  • Developer Tools

Pages

  • About Us
  • Contact Us
  • Privacy Policy
  • Terms of Service
  • Refund Policy
  • Disclaimer
  • Advertisement

Popular Topics

  • PHP
  • Laravel
  • Python
  • React.Js
  • MySQL
© 2026 KoderSolutionAll Rights Reserved
Developed Bymaksudur.dev
⚡

JavaScript

Topic Hub & Articles

JS Introduction

10 min

JS Where To

10 min

JS Output

10 min

Recap Quiz

5 Questions

JS Statements

10 min

JS Syntax

10 min

JS Comments

10 min

Recap Quiz

5 Questions

JS Variables

10 min

JS Let

10 min

JS Const

10 min

Recap Quiz

5 Questions

JS Operators

10 min

JS Arithmetic

10 min

JS Assignment

10 min

Recap Quiz

5 Questions

JS Data Types

10 min

JS Functions

10 min

JS Objects

10 min

Recap Quiz

5 Questions

JS Events

10 min

JS Strings

10 min

JS String Methods

10 min

Recap Quiz

5 Questions

JS String Search

10 min

JS String Templates

10 min

JS Numbers

10 min

Recap Quiz

5 Questions

JS Number Methods

10 min

JS BigInt

10 min

JS Arrays

10 min

Recap Quiz

5 Questions

JS Array Methods

10 min

JS Array Search

10 min

JS Array Sort

10 min

Recap Quiz

5 Questions

JS Array Iteration

10 min

JS Array Const

10 min

JS Dates

10 min

Recap Quiz

5 Questions

JS Date Formats

10 min

JS Date Get Methods

10 min

JS Date Set Methods

10 min

Recap Quiz

5 Questions

JS Math

10 min

JS Random

10 min

JS Booleans

10 min

Recap Quiz

5 Questions

JS Comparisons

10 min

JS If Else

10 min

JS Switch

10 min

Recap Quiz

5 Questions

JS Loop For

10 min

JS Loop For In

10 min

JS Loop For Of

10 min

Recap Quiz

5 Questions

JS Loop While

10 min

JS Break

10 min

JS Iterables

10 min

Recap Quiz

5 Questions

JS Sets

10 min

JS Maps

10 min

JS TypeOf

10 min

Recap Quiz

5 Questions

JS Type Conversion

10 min

JS Destructuring

10 min

JS Bitwise

10 min

Recap Quiz

5 Questions

JS RegExp

10 min

JS Errors

10 min

JS Scope

10 min

Recap Quiz

5 Questions

JS Hoisting

10 min

JS Strict Mode

10 min

JS This Keyword

10 min

Recap Quiz

5 Questions

JS Arrow Function

10 min

JS Classes

10 min

JS Modules

10 min

Recap Quiz

5 Questions

JS JSON

10 min

JS Debugging

10 min

JS Best Practices

10 min

Recap Quiz

5 Questions

JS Common Mistakes

10 min

JS Performance

10 min

JS Reserved Words

10 min

Recap Quiz

5 Questions

DOM Intro

10 min

DOM Methods

10 min

DOM Document

10 min

Recap Quiz

5 Questions

DOM Elements

10 min

DOM HTML

10 min

DOM Forms

10 min

Recap Quiz

5 Questions

DOM CSS

10 min

DOM Animation

10 min

DOM Events

10 min

Recap Quiz

5 Questions

DOM Event Listener

10 min

DOM Navigation

10 min

DOM Nodes

10 min

Recap Quiz

5 Questions

DOM Collections

10 min

DOM Node List

10 min

JS Window

10 min

JS Screen

10 min

JS Location

10 min

Recap Quiz

5 Questions

JS History

10 min

JS Navigator

10 min

JS Popup Alert

10 min

Recap Quiz

5 Questions

JS Timing

10 min

JS Cookies

10 min

JS Callbacks

10 min

JS Asynchronous

10 min

JS Promises

10 min

Recap Quiz

5 Questions

JS Async/Await

10 min

Progress
0%

0 / 92 Lessons

JavaScriptJS Tutorial
Lesson

JS This Keyword

10 min reading
Free Course

JavaScript this Keyword: Invocation Context & Explicit Binding

The this keyword refers to the object executing the current function. Its value is NOT static; it is determined at runtime based on how the function was invoked (Implicit, Explicit, New, or Arrow binding).

this Binding Rules Decision Tree

flowchart TD
    CallSite["Function Call Site"] --> Rule1{"Invoked with 'new'?"}
    Rule1 -- "Yes" --> NewBound["this = Newly Created Object Instance"]
    
    Rule1 -- "No" --> Rule2{"Invoked via call(), apply(), or bind()?"}
    Rule2 -- "Yes" --> ExplicitBound["this = Explicit Target Object"]
    
    Rule2 -- "No" --> Rule3{"Invoked as Method (obj.func())?"}
    Rule3 -- "Yes" --> MethodBound["this = Context Object (obj)"]
    
    Rule3 -- "No" --> Rule4{"Is Arrow Function?"}
    Rule4 -- "Yes" --> LexicalBound["this = Lexical Enclosing Scope 'this'"]
    Rule4 -- "No" --> DefaultBound["this = globalThis (or undefined in strict mode)"]

this Binding Summary Table

Invocation Style Code Pattern this Reference
Method Invocation user.getScore() user object
Explicit Binding func.call(obj, arg) / func.bind(obj) Explicitly passed obj
Constructor Invocation new User() Newly instantiated instance
Arrow Function () => { console.log(this); } Lexical outer scope this
Standalone Invocation showInfo() undefined (Strict) / window (Non-Strict)

Practical Code Example

// Demonstrating the 4 binding rules of 'this'

// 1. Method Invocation (Implicit Binding)
const account = {
  username: "Maksudur",
  display() {
    console.log(`Method this: ${this.username}`);
  }
};
account.display(); // "Maksudur"

// Loss of implicit binding when detached from object context
const detachedDisplay = account.display;
// detachedDisplay(); // Throws TypeError: Cannot read property 'username' of undefined in strict mode

// 2. Explicit Binding (call, apply, bind)
const externalUser = { username: "Sarah" };
account.display.call(externalUser); // Explicitly sets this to externalUser -> "Sarah"

const boundDisplay = account.display.bind(externalUser);
boundDisplay(); // Fixed bound function -> "Sarah"

// 3. Arrow Function Lexical 'this'
const timer = {
  seconds: 0,
  start() {
    // Arrow function inherits 'this' from timer.start() execution context!
    setTimeout(() => {
      this.seconds++;
      console.log(`Timer seconds: ${this.seconds}`);
    }, 50);
  }
};
timer.start();

Best Practices & Gotchas

  • Do Not Use Arrow Functions for Object Methods: Defining object methods with arrow functions (display: () => { ... }) binds this to the outer global scope, causing this.prop to evaluate as undefined.
  • Use bind() for Event Listener Callbacks: Pass this.handleClick.bind(this) to DOM event listeners inside class components to preserve class instance binding.
  • Difference Between call and apply: call(thisArg, arg1, arg2) accepts comma-separated arguments. apply(thisArg, [argsArray]) accepts an array of arguments.

Self-Check Challenge

Explain the output difference between fn.call(obj, 10, 20) and fn.apply(obj, [10, 20]).

Save Your Progress

Unlock Your
Full Potential.

Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.

Quick Access With

Enterprise-Grade Security Protocol

Recommended Courses & Books

Try it Yourself

Experiment with the code from this lesson in our interactive playground.

Open Playground
Lesson Recap Quiz Available

Test Your Knowledge

You've completed this section! Take a quick 5-question quiz to check your understanding.

Stuck on this lesson?

Join our community of senior developers.

Ask in Forum