{"id":26658,"date":"2026-07-21T06:35:35","date_gmt":"2026-07-21T06:35:35","guid":{"rendered":"https:\/\/www.kaashivinfotech.com\/blog\/?p=26658"},"modified":"2026-07-21T06:35:35","modified_gmt":"2026-07-21T06:35:35","slug":"guide-to-this-keyword-in-javascript","status":"publish","type":"post","link":"https:\/\/www.kaashivinfotech.com\/blog\/guide-to-this-keyword-in-javascript\/","title":{"rendered":"Complete Guide to this Keyword in JavaScript in 2026"},"content":{"rendered":"<p class=\"PDq2pG_selectionAnchorContainer\" data-start=\"78\" data-end=\"318\">If there\u2019s one concept in JavaScript that confuses beginners and still challenges experienced developers, it\u2019s the <code class=\"\" data-line=\"\">this<\/code> keyword. I\u2019ve personally seen developers write perfect logic\u2014but a small misunderstanding of <code class=\"\" data-line=\"\">this<\/code> keyword in javascript breaks everything.<\/p>\n<p data-start=\"320\" data-end=\"341\">So let\u2019s simplify it.<\/p>\n<p data-start=\"343\" data-end=\"575\">At its core, <strong data-start=\"356\" data-end=\"434\"><code class=\"\" data-line=\"\">this<\/code><\/strong>is a reference to the object that is currently executing a function. But here\u2019s the catch: JavaScript decides the value of <code class=\"\" data-line=\"\">this<\/code> <strong data-start=\"497\" data-end=\"511\">at runtime<\/strong>, based on <em data-start=\"522\" data-end=\"550\">how the function is called<\/em>, not where it\u2019s written.<\/p>\n<p data-start=\"577\" data-end=\"660\">Once you truly understand this behavior, your <a href=\"https:\/\/www.wikitechy.com\/tutorials\/javascript\/javascript-tutorial\" target=\"_blank\" rel=\"noopener\">JavaScript<\/a> skills level up instantly.<\/p>\n<hr data-start=\"662\" data-end=\"665\" \/>\n<h2 data-section-id=\"32nhw5\" data-start=\"667\" data-end=\"710\"><span role=\"text\">\ud83d\udd0d Understanding the Core Idea of this keyword in javascript<\/span><\/h2>\n<p data-start=\"712\" data-end=\"767\">Instead of memorizing rules, think of <code class=\"\" data-line=\"\">this<\/code> like this:<\/p>\n<blockquote data-start=\"769\" data-end=\"824\">\n<p data-start=\"771\" data-end=\"824\">\ud83d\udc49 &#8220;<code class=\"\" data-line=\"\">this<\/code> is decided by the caller of the function.&#8221;<\/p>\n<\/blockquote>\n<p data-start=\"826\" data-end=\"983\">That means the same function can behave differently depending on how it\u2019s invoked. This dynamic nature is what makes <code class=\"\" data-line=\"\">this<\/code> powerful\u2014and sometimes confusing.<\/p>\n<p data-start=\"826\" data-end=\"983\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-26659 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword.png\" alt=\"\" width=\"526\" height=\"296\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword.png 2240w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-300x169.png 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-1024x576.png 1024w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-768x432.png 768w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-1536x864.png 1536w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-2048x1152.png 2048w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-400x225.png 400w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-800x450.png 800w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-832x468.png 832w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-1664x936.png 1664w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-keyword-1248x702.png 1248w\" sizes=\"auto, (max-width: 526px) 100vw, 526px\" \/><\/p>\n<hr data-start=\"985\" data-end=\"988\" \/>\n<h2 data-section-id=\"1h6odh4\" data-start=\"990\" data-end=\"1024\"><span role=\"text\">\ud83c\udf0d <code class=\"\" data-line=\"\">this<\/code> in the Global Context<\/span><\/h2>\n<p data-start=\"1026\" data-end=\"1111\">When you use <code class=\"\" data-line=\"\">this<\/code> outside any function, it belongs to the global execution context.<\/p>\n<p data-start=\"1113\" data-end=\"1169\">In a browser environment, the global object is <code class=\"\" data-line=\"\">window<\/code>.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;); <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1210\" data-end=\"1315\">In most browsers, this will log the <code class=\"\" data-line=\"\">window<\/code> object. However, when you enable strict mode, things change:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cz&quot;&gt;&quot;use strict&quot;&lt;\/span&gt;;\n&lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1369\" data-end=\"1528\">Here, <code class=\"\" data-line=\"\">this<\/code> becomes <code class=\"\" data-line=\"\">undefined<\/code>. This is one reason modern JavaScript (especially ES modules) behaves more predictably\u2014it avoids accidental global references.<\/p>\n<hr data-start=\"1530\" data-end=\"1533\" \/>\n<h2 data-section-id=\"16rb7ia\" data-start=\"1535\" data-end=\"1562\"><span role=\"text\">\ud83d\udce6 <code class=\"\" data-line=\"\">this<\/code> Inside Objects<\/span><\/h2>\n<p data-start=\"1564\" data-end=\"1650\">When a function is defined as a method inside an object, <code class=\"\" data-line=\"\">this<\/code> refers to that object.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;user&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; {\n  name: &lt;span class=&quot;\u037cz&quot;&gt;&quot;John&quot;&lt;\/span&gt;,\n  greet: &lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; () {\n    &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;name);\n  }\n};\n\n&lt;span class=&quot;\u037c11&quot;&gt;user&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;greet();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"1775\" data-end=\"1881\">In this case, <code class=\"\" data-line=\"\">this<\/code> clearly points to the <code class=\"\" data-line=\"\">user<\/code> object because <code class=\"\" data-line=\"\">greet()<\/code> is called using <code class=\"\" data-line=\"\">user.greet()<\/code>.<\/p>\n<p data-start=\"1883\" data-end=\"1979\">Now here\u2019s something interesting. If you store that method in a variable and call it separately:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;fn&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;user&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;greet;\n&lt;span class=&quot;\u037c11&quot;&gt;fn&lt;\/span&gt;();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"2029\" data-end=\"2213\">Now <code class=\"\" data-line=\"\">this<\/code> is no longer <code class=\"\" data-line=\"\">user<\/code>. It falls back to global (or <code class=\"\" data-line=\"\">undefined<\/code> in strict mode). This shows how <strong data-start=\"2133\" data-end=\"2212\">the caller determines <code class=\"\" data-line=\"\">this<\/code>, not the object where the function was defined<\/strong>.<\/p>\n<hr data-start=\"2215\" data-end=\"2218\" \/>\n<h2 data-section-id=\"neu62e\" data-start=\"2220\" data-end=\"2253\"><span role=\"text\">\ud83d\udd04 <code class=\"\" data-line=\"\">this<\/code> in Regular Functions<\/span><\/h2>\n<p data-start=\"2255\" data-end=\"2303\">Regular standalone functions behave differently.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;show&lt;\/span&gt;() {\n  &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;);\n}\n\n&lt;span class=&quot;\u037c11&quot;&gt;show&lt;\/span&gt;();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"2374\" data-end=\"2469\">In non-strict mode, <code class=\"\" data-line=\"\">this<\/code> refers to the global object. In strict mode, it becomes <code class=\"\" data-line=\"\">undefined<\/code>.<\/p>\n<p data-start=\"2471\" data-end=\"2615\">This difference is important when writing clean, predictable code\u2014especially in modern JavaScript applications where strict mode is the default.<\/p>\n<p data-start=\"2471\" data-end=\"2615\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-26660 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/regular-function-this.jpg\" alt=\"\" width=\"549\" height=\"261\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/regular-function-this.jpg 640w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/regular-function-this-300x143.jpg 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/regular-function-this-400x190.jpg 400w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/p>\n<hr data-start=\"2617\" data-end=\"2620\" \/>\n<h2 data-section-id=\"55bkuv\" data-start=\"2622\" data-end=\"2661\"><span role=\"text\">\u26a1 Arrow Functions and Lexical <code class=\"\" data-line=\"\">this<\/code><\/span><\/h2>\n<p data-start=\"2663\" data-end=\"2714\">Arrow functions completely change how <code class=\"\" data-line=\"\">this<\/code> works.<\/p>\n<p data-start=\"2716\" data-end=\"2807\">They do not create their own <code class=\"\" data-line=\"\">this<\/code>. Instead, they inherit it from their surrounding scope.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;obj&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; {\n  name: &lt;span class=&quot;\u037cz&quot;&gt;&quot;Alex&quot;&lt;\/span&gt;,\n  greet: () =&gt; {\n    &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;name);\n  }\n};\n\n&lt;span class=&quot;\u037c11&quot;&gt;obj&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;greet();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"2924\" data-end=\"3071\">You might expect <code class=\"\" data-line=\"\">&quot;Alex&quot;<\/code>, but you\u2019ll get <code class=\"\" data-line=\"\">undefined<\/code>. That\u2019s because the arrow function takes <code class=\"\" data-line=\"\">this<\/code> from the outer scope, which is not the <code class=\"\" data-line=\"\">obj<\/code>.<\/p>\n<p data-start=\"3073\" data-end=\"3090\">Now look at this:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;obj&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; {\n  name: &lt;span class=&quot;\u037cz&quot;&gt;&quot;Alex&quot;&lt;\/span&gt;,\n  greet: &lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; () {\n    &lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;inner&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; () =&gt; {\n      &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;name);\n    };\n    &lt;span class=&quot;\u037c11&quot;&gt;inner&lt;\/span&gt;();\n  }\n};\n\n&lt;span class=&quot;\u037c11&quot;&gt;obj&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;greet();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"3261\" data-end=\"3367\">Here it works perfectly because the arrow function inherits <code class=\"\" data-line=\"\">this<\/code> from <code class=\"\" data-line=\"\">greet()<\/code>, which belongs to <code class=\"\" data-line=\"\">obj<\/code>.<\/p>\n<p data-start=\"3369\" data-end=\"3461\">\ud83d\udc49 This is why arrow functions are excellent for callbacks but not ideal for object methods.<\/p>\n<hr data-start=\"3463\" data-end=\"3466\" \/>\n<h2 data-section-id=\"ujc0c4\" data-start=\"3468\" data-end=\"3498\"><span role=\"text\">\ud83e\udde9 <code class=\"\" data-line=\"\">this<\/code> in Event Handlers<\/span><\/h2>\n<p data-start=\"3500\" data-end=\"3584\">When working with DOM events, <code class=\"\" data-line=\"\">this<\/code> refers to the element that triggered the event.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037c11&quot;&gt;button&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;addEventListener(&lt;span class=&quot;\u037cz&quot;&gt;&quot;click&quot;&lt;\/span&gt;, &lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; () {\n  &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;);\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"3677\" data-end=\"3719\">Here, <code class=\"\" data-line=\"\">this<\/code> refers to the button element.<\/p>\n<p data-start=\"3721\" data-end=\"3760\">But if you switch to an arrow function:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037c11&quot;&gt;button&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;addEventListener(&lt;span class=&quot;\u037cz&quot;&gt;&quot;click&quot;&lt;\/span&gt;, () =&gt; {\n  &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;);\n});<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"3847\" data-end=\"3969\">Now <code class=\"\" data-line=\"\">this<\/code> is inherited from the outer scope, which is usually not the button. This often leads to bugs in UI development.<\/p>\n<hr data-start=\"3971\" data-end=\"3974\" \/>\n<h2 data-section-id=\"1t7239x\" data-start=\"3976\" data-end=\"4015\"><span role=\"text\">\ud83c\udfd7\ufe0f Constructor Functions and <code class=\"\" data-line=\"\">this<\/code><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-26661 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this.jpg\" alt=\"\" width=\"519\" height=\"292\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this.jpg 1280w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this-300x169.jpg 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this-1024x576.jpg 1024w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this-768x432.jpg 768w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this-400x225.jpg 400w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this-800x450.jpg 800w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this-832x468.jpg 832w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/Constructor-Functions-and-this-1248x702.jpg 1248w\" sizes=\"auto, (max-width: 519px) 100vw, 519px\" \/><\/p>\n<p data-start=\"4017\" data-end=\"4076\">Before ES6 classes, constructor functions were widely used.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;Person&lt;\/span&gt;(&lt;span class=&quot;\u037c11&quot;&gt;name&lt;\/span&gt;) {\n  &lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;name &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;name&lt;\/span&gt;;\n}\n\n&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;p1&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;new&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;Person&lt;\/span&gt;(&lt;span class=&quot;\u037cz&quot;&gt;&quot;John&quot;&lt;\/span&gt;);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"4175\" data-end=\"4264\">When you use the <code class=\"\" data-line=\"\">new<\/code> keyword, JavaScript creates a new object and assigns it to <code class=\"\" data-line=\"\">this<\/code>.<\/p>\n<p data-start=\"4266\" data-end=\"4396\">If you forget <code class=\"\" data-line=\"\">new<\/code>, <code class=\"\" data-line=\"\">this<\/code> won\u2019t behave as expected and may even modify the global object\u2014something you definitely want to avoid.<\/p>\n<hr data-start=\"4398\" data-end=\"4401\" \/>\n<h2 data-section-id=\"1vidskz\" data-start=\"4403\" data-end=\"4430\"><span role=\"text\">\ud83e\uddf1 <code class=\"\" data-line=\"\">this<\/code> in ES6 Classes<\/span><\/h2>\n<p data-start=\"4432\" data-end=\"4507\">Classes provide a cleaner syntax, but internally they still rely on <code class=\"\" data-line=\"\">this<\/code>.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;class&lt;\/span&gt; &lt;span class=&quot;\u037c10&quot;&gt;Car&lt;\/span&gt; {\n  constructor(&lt;span class=&quot;\u037c11&quot;&gt;brand&lt;\/span&gt;) {\n    &lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;brand &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;brand&lt;\/span&gt;;\n  }\n\n  show() {\n    &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;brand);\n  }\n}\n\n&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;car1&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;new&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;Car&lt;\/span&gt;(&lt;span class=&quot;\u037cz&quot;&gt;&quot;BMW&quot;&lt;\/span&gt;);\n&lt;span class=&quot;\u037c11&quot;&gt;car1&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;show();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"4681\" data-end=\"4786\">Here, <code class=\"\" data-line=\"\">this<\/code> refers to the instance of the class. Each object created from the class gets its own <code class=\"\" data-line=\"\">this<\/code>.<\/p>\n<hr data-start=\"4788\" data-end=\"4791\" \/>\n<h2 data-section-id=\"1x1kxn1\" data-start=\"4793\" data-end=\"4826\"><span role=\"text\">\ud83d\udd17 Controlling <code class=\"\" data-line=\"\">this<\/code> Manually<\/span><\/h2>\n<p data-start=\"4828\" data-end=\"4912\">JavaScript gives you explicit control over <code class=\"\" data-line=\"\">this<\/code> using <code class=\"\" data-line=\"\">call<\/code>, <code class=\"\" data-line=\"\">apply<\/code>, and <code class=\"\" data-line=\"\">bind<\/code>.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;greet&lt;\/span&gt;() {\n  &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;name);\n}\n\n&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;user&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; { name: &lt;span class=&quot;\u037cz&quot;&gt;&quot;Sam&quot;&lt;\/span&gt; };<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"5011\" data-end=\"5079\">With <code class=\"\" data-line=\"\">call<\/code>, you immediately invoke the function and specify <code class=\"\" data-line=\"\">this<\/code>:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037c11&quot;&gt;greet&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;call(&lt;span class=&quot;\u037c11&quot;&gt;user&lt;\/span&gt;);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"5118\" data-end=\"5176\"><code class=\"\" data-line=\"\">apply<\/code> works similarly but accepts arguments as an array.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037c11&quot;&gt;greet&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;apply(&lt;span class=&quot;\u037c11&quot;&gt;user&lt;\/span&gt;);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"5216\" data-end=\"5299\"><code class=\"\" data-line=\"\">bind<\/code> is slightly different\u2014it returns a new function with <code class=\"\" data-line=\"\">this<\/code> permanently set:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;bound&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;greet&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;bind(&lt;span class=&quot;\u037c11&quot;&gt;user&lt;\/span&gt;);\n&lt;span class=&quot;\u037c11&quot;&gt;bound&lt;\/span&gt;();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"5361\" data-end=\"5422\">This is extremely useful when passing functions as callbacks.<\/p>\n<hr data-start=\"5424\" data-end=\"5427\" \/>\n<h2 data-section-id=\"hljft0\" data-start=\"5429\" data-end=\"5462\"><span role=\"text\">\ud83d\udd04 <code class=\"\" data-line=\"\">this<\/code> in Asynchronous Code<\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-26662 \" src=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code.png\" alt=\"\" width=\"533\" height=\"300\" srcset=\"https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code.png 1280w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code-300x169.png 300w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code-1024x576.png 1024w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code-768x432.png 768w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code-400x225.png 400w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code-800x450.png 800w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code-832x468.png 832w, https:\/\/www.kaashivinfotech.com\/blog\/wp-content\/uploads\/2026\/07\/this-in-Asynchronous-Code-1248x702.png 1248w\" sizes=\"auto, (max-width: 533px) 100vw, 533px\" \/><\/p>\n<p data-start=\"5464\" data-end=\"5546\">One of the most common problems developers face is losing <code class=\"\" data-line=\"\">this<\/code> inside callbacks.<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037cv&quot;&gt;const&lt;\/span&gt; &lt;span class=&quot;\u037c11&quot;&gt;obj&lt;\/span&gt; &lt;span class=&quot;\u037cv&quot;&gt;=&lt;\/span&gt; {\n  name: &lt;span class=&quot;\u037cz&quot;&gt;&quot;Test&quot;&lt;\/span&gt;,\n  show: &lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; () {\n    &lt;span class=&quot;\u037c11&quot;&gt;setTimeout&lt;\/span&gt;(&lt;span class=&quot;\u037cv&quot;&gt;function&lt;\/span&gt; () {\n      &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;name);\n    }, &lt;span class=&quot;\u037cy&quot;&gt;1000&lt;\/span&gt;);\n  }\n};\n\n&lt;span class=&quot;\u037c11&quot;&gt;obj&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;show();<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"5712\" data-end=\"5769\">Here, <code class=\"\" data-line=\"\">this<\/code> inside <code class=\"\" data-line=\"\">setTimeout<\/code> does not refer to <code class=\"\" data-line=\"\">obj<\/code>.<\/p>\n<p data-start=\"5771\" data-end=\"5814\">To fix this, you can use an arrow function:<\/p>\n<div class=\"relative w-full mt-4 mb-1\">\n<div class=\"\">\n<div class=\"contents\">\n<div class=\"border border-token-border-light border-radius-3xl corner-superellipse\/1.1 rounded-3xl\">\n<div class=\"relative h-full w-full border-radius-3xl bg-(--code-block-surface) corner-superellipse\/1.1 overflow-clip rounded-3xl [--code-block-surface:var(--bg-elevated-secondary)] dark:[--code-block-surface:var(--composer-surface-primary)] lxnfua_clipPathFallback\">\n<div class=\"pointer-events-none absolute inset-x-4 top-12 bottom-4\">\n<div class=\"pointer-events-none sticky z-40 shrink-0 z-1!\">\n<div class=\"sticky bg-token-border-light\"><\/div>\n<\/div>\n<\/div>\n<div class=\"relative\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"h-full min-h-0 min-w-0\">\n<div class=\"\">\n<div class=\"relative\">\n<div class=\"\">\n<div class=\"relative z-0 flex max-w-full\">\n<div id=\"code-block-viewer\" class=\"q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch \u037cs \u037c16\" dir=\"ltr\">\n<div class=\"cm-scroller\">\n<pre class=\"cm-content q9tKkq_readonly m-0\"><code class=\"\" data-line=\"\">&lt;span class=&quot;\u037c11&quot;&gt;setTimeout&lt;\/span&gt;(() =&gt; {\n  &lt;span class=&quot;\u037c11&quot;&gt;console&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;log(&lt;span class=&quot;\u037cy&quot;&gt;this&lt;\/span&gt;&lt;span class=&quot;\u037cv&quot;&gt;.&lt;\/span&gt;name);\n}, &lt;span class=&quot;\u037cy&quot;&gt;1000&lt;\/span&gt;);<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"\">\n<div class=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p data-start=\"5890\" data-end=\"5932\">Now <code class=\"\" data-line=\"\">this<\/code> correctly refers to the object.<\/p>\n<hr data-start=\"5934\" data-end=\"5937\" \/>\n<h2 data-section-id=\"w7y0qp\" data-start=\"5939\" data-end=\"5977\">\u26a0\ufe0f Common Pitfalls You Should Avoid<\/h2>\n<p data-start=\"5979\" data-end=\"6354\">Many bugs in JavaScript applications come from misunderstanding <code class=\"\" data-line=\"\">this<\/code>. A frequent issue is losing the reference when passing methods as callbacks. Another common mistake is using arrow functions as object methods, which leads to unexpected results. Forgetting the <code class=\"\" data-line=\"\">new<\/code> keyword in constructor functions can also cause serious problems by binding <code class=\"\" data-line=\"\">this<\/code> to the global object.<\/p>\n<p data-start=\"6356\" data-end=\"6429\">Understanding these patterns helps you avoid subtle and frustrating bugs.<\/p>\n<hr data-start=\"6431\" data-end=\"6434\" \/>\n<h2 data-section-id=\"lr8jhq\" data-start=\"6436\" data-end=\"6465\">\ud83e\udde0 Best Practices for 2026<\/h2>\n<p data-start=\"6467\" data-end=\"6804\">Modern JavaScript development has evolved, and so have best practices around <code class=\"\" data-line=\"\">this<\/code>. It\u2019s recommended to use arrow functions for callbacks where you want to preserve the surrounding context. For object methods, regular functions are still the better choice. When passing methods around, using <code class=\"\" data-line=\"\">bind<\/code> ensures that <code class=\"\" data-line=\"\">this<\/code> doesn\u2019t get lost.<\/p>\n<p data-start=\"6806\" data-end=\"6932\">Also, writing code in strict mode or using ES modules ensures safer handling of <code class=\"\" data-line=\"\">this<\/code>, preventing accidental global bindings.<code class=\"\" data-line=\"\"><\/code><\/p>\n<hr data-start=\"7293\" data-end=\"7296\" \/>\n<h2 data-section-id=\"p320wl\" data-start=\"7298\" data-end=\"7314\">\ud83c\udfaf Conclusion<\/h2>\n<p data-start=\"7316\" data-end=\"7474\">The <code class=\"\" data-line=\"\">this<\/code> keyword might feel tricky at first, but once you stop memorizing rules and start understanding <em data-start=\"7422\" data-end=\"7441\">execution context<\/em>, everything becomes much easier.<\/p>\n<p data-start=\"7476\" data-end=\"7621\">From my experience, the best way to master <code class=\"\" data-line=\"\">this<\/code> is to experiment. Try different calling patterns, break things, and observe how <code class=\"\" data-line=\"\">this<\/code> behaves.<\/p>\n<p data-start=\"7623\" data-end=\"7642\">\ud83d\udc49 Always remember:<\/p>\n<blockquote data-start=\"7643\" data-end=\"7727\">\n<p data-start=\"7645\" data-end=\"7727\"><strong data-start=\"7645\" data-end=\"7727\"><code class=\"\" data-line=\"\">this<\/code> is not about where the function is written\u2014it\u2019s about how it is called.<\/strong><\/p>\n<\/blockquote>\n<p data-start=\"7729\" data-end=\"7833\">Once this concept clicks, you\u2019ll write cleaner, more predictable, and more professional JavaScript code.<\/p>\n<p data-start=\"12813\" data-end=\"13013\">Want to learn more??, Kaashiv Infotech Offers\u00a0<a href=\"https:\/\/www.kaashivinfotech.com\/front-end-developer-course\/\">Front End Development Course<\/a>,\u00a0<a href=\"https:\/\/www.kaashivinfotech.com\/courses\/\">Full Stack Development Course<\/a>\u00a0And More Visit Our Website\u00a0<a href=\"https:\/\/www.kaashivinfotech.com\/\">www.kaashivinfotech.com<\/a>.<\/p>\n<h2 data-start=\"12813\" data-end=\"13013\">Related Reads:<\/h2>\n<ul>\n<li>\n<p class=\"title\"><a href=\"https:\/\/www.kaashivinfotech.com\/blog\/event-delegation-and-event-bubbling-in-javascript\/\"><span class=\"title-span\">Event Delegation and Event Bubbling in JavaScript \u2013 A Complete In-Depth Guide<\/span><\/a><\/p>\n<\/li>\n<li>\n<p class=\"title\"><a href=\"https:\/\/www.kaashivinfotech.com\/blog\/what-is-the-dom-in-javascript\/\"><span class=\"title-span\">What Is the DOM in JavaScript? The Surprisingly Powerful System Behind Every Interactive Webpage in 2025<\/span><\/a><\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"If there\u2019s one concept in JavaScript that confuses beginners and still challenges experienced developers, it\u2019s the this keyword.&hellip;","protected":false},"author":8,"featured_media":26663,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_singular_sidebar":"","csco_page_header_type":"","csco_page_load_nextpost":"","footnotes":""},"categories":[604,3383],"tags":[15334,15336,15335,15338,15340,15339,15341,15337],"class_list":["post-26658","post","type-post","status-publish","format-standard","has-post-thumbnail","category-developer-skills","category-java-script","tag-this-keyword-in-javascript","tag-this-keyword-in-javascript-arrow-function","tag-this-keyword-in-javascript-example","tag-this-keyword-in-javascript-in-simple-words","tag-this-keyword-in-javascript-interview-questions","tag-this-keyword-in-javascript-mdn","tag-this-keyword-in-javascript-medium","tag-this-keyword-in-javascript-object","cs-entry"],"_links":{"self":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/26658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/comments?post=26658"}],"version-history":[{"count":2,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/26658\/revisions"}],"predecessor-version":[{"id":26665,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/posts\/26658\/revisions\/26665"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/media\/26663"}],"wp:attachment":[{"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/media?parent=26658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/categories?post=26658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaashivinfotech.com\/blog\/wp-json\/wp\/v2\/tags?post=26658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}