<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Animesh Pandey</title>
    <description>The latest articles on Forem by Animesh Pandey (@anmshpndy).</description>
    <link>https://forem.com/anmshpndy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F470180%2Fc356143f-e821-4c86-b621-49870ab3b429.jpg</url>
      <title>Forem: Animesh Pandey</title>
      <link>https://forem.com/anmshpndy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/anmshpndy"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Animesh Pandey</dc:creator>
      <pubDate>Wed, 31 Dec 2025 07:25:22 +0000</pubDate>
      <link>https://forem.com/anmshpndy/-1k43</link>
      <guid>https://forem.com/anmshpndy/-1k43</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/matheuscamarques/are-feature-flags-bullsht-why-your-if-is-killing-performance-and-the-planet-26bi" class="crayons-story__hidden-navigation-link"&gt;Are Feature Flags Bullsh*t? Why Your "IF" is Killing Performance (and the Planet)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/matheuscamarques" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F882243%2Fde69153a-a393-4f28-9761-e5b60402c45b.jpeg" alt="matheuscamarques profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/matheuscamarques" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Matheus de Camargo Marques
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Matheus de Camargo Marques
                
              
              &lt;div id="story-author-preview-content-3136691" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/matheuscamarques" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F882243%2Fde69153a-a393-4f28-9761-e5b60402c45b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Matheus de Camargo Marques&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/matheuscamarques/are-feature-flags-bullsht-why-your-if-is-killing-performance-and-the-planet-26bi" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 30 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/matheuscamarques/are-feature-flags-bullsht-why-your-if-is-killing-performance-and-the-planet-26bi" id="article-link-3136691"&gt;
          Are Feature Flags Bullsh*t? Why Your "IF" is Killing Performance (and the Planet)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/elixir"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;elixir&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/erlang"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;erlang&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/pon"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;pon&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/actor"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;actor&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/matheuscamarques/are-feature-flags-bullsht-why-your-if-is-killing-performance-and-the-planet-26bi" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;24&lt;span class="hidden s:inline"&gt; reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/matheuscamarques/are-feature-flags-bullsht-why-your-if-is-killing-performance-and-the-planet-26bi#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>elixir</category>
      <category>erlang</category>
      <category>pon</category>
      <category>actor</category>
    </item>
    <item>
      <title>TypeScript Expert Revision Handbook</title>
      <dc:creator>Animesh Pandey</dc:creator>
      <pubDate>Sun, 31 Aug 2025 19:19:44 +0000</pubDate>
      <link>https://forem.com/anmshpndy/typescript-expert-revision-handbook-466f</link>
      <guid>https://forem.com/anmshpndy/typescript-expert-revision-handbook-466f</guid>
      <description>&lt;h2&gt;
  
  
  📑 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fundamentals&lt;/li&gt;
&lt;li&gt;Advanced Types&lt;/li&gt;
&lt;li&gt;Generics in Depth&lt;/li&gt;
&lt;li&gt;Type Inference &amp;amp; Compatibility&lt;/li&gt;
&lt;li&gt;Type Safety in JavaScript Interop&lt;/li&gt;
&lt;li&gt;Type Guards &amp;amp; Narrowing&lt;/li&gt;
&lt;li&gt;Advanced Patterns&lt;/li&gt;
&lt;li&gt;TypeScript in React&lt;/li&gt;
&lt;li&gt;Performance &amp;amp; Scaling&lt;/li&gt;
&lt;li&gt;Ecosystem &amp;amp; Future&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🟦 Fundamentals (Expert Level)
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🧩 Type System vs Runtime Behavior
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
TypeScript is a &lt;strong&gt;compile-time type system&lt;/strong&gt; — all types are erased at runtime.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Types are &lt;strong&gt;structural&lt;/strong&gt;, not nominal (duck typing).&lt;/li&gt;
&lt;li&gt;Type checking = compile-time only.&lt;/li&gt;
&lt;li&gt;At runtime, it’s just JavaScript.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Type safety doesn’t prevent runtime errors:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// compiles, but runtime crash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;No runtime enforcement — you need runtime validators (&lt;code&gt;zod&lt;/code&gt;, &lt;code&gt;io-ts&lt;/code&gt;, &lt;code&gt;yup&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TypeScript’s types disappear at runtime. They make dev-time guarantees, but runtime safety requires explicit validation.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🔢 Core Primitive Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Basic Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;null&lt;/code&gt;, &lt;code&gt;undefined&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;symbol&lt;/code&gt;, &lt;code&gt;bigint&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Special Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;any&lt;/code&gt; → Opt-out of type system (unsafe).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;unknown&lt;/code&gt; → Safer alternative; must narrow before use.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;never&lt;/code&gt; → Function that never returns (errors, infinite loops).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;void&lt;/code&gt; → Function returns nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// compiles, runtime crash&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ❌ compile error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;any&lt;/code&gt; disables safety. Prefer &lt;code&gt;unknown&lt;/code&gt; when you don’t know the type, since it forces narrowing before use.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🏷️ Type Assertions vs Casting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Tell the compiler “trust me, this is of type X.”&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Syntax
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;HTMLDivElement&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Non-null Assertion
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// never null&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Overusing assertions bypasses safety.&lt;/li&gt;
&lt;li&gt;Wrong assertions → runtime crashes.&lt;/li&gt;
&lt;li&gt;Non-null &lt;code&gt;!&lt;/code&gt; can hide real null bugs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Assertions tell TS to trust you. They don’t change runtime — overuse can hide real errors.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🔍 Type Narrowing (Control Flow Analysis)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
TS refines types based on runtime checks.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Techniques
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;typeof&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;instanceof&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Equality checks&lt;/li&gt;
&lt;li&gt;Discriminated unions (tag property)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printLen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// string[] length&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Narrowing only works if TS can &lt;strong&gt;see&lt;/strong&gt; the check.&lt;/li&gt;
&lt;li&gt;External function calls won’t narrow unless you define &lt;strong&gt;type predicates&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TypeScript narrows unions using control flow. You can extend it with custom type predicates.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🚦 Strict Null Checking
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
With &lt;code&gt;strictNullChecks&lt;/code&gt;, &lt;code&gt;null&lt;/code&gt; and &lt;code&gt;undefined&lt;/code&gt; are not assignable to other types unless explicitly included.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ❌ error under strictNullChecks&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Optional Chaining + Nullish Coalescing
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Guest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Many JS libs don’t account for &lt;code&gt;undefined&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Without &lt;code&gt;strictNullChecks&lt;/code&gt;, you get &lt;strong&gt;unsound behavior&lt;/strong&gt; (nullable everywhere).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Strict null checks make nullability explicit, avoiding the billion-dollar mistake. Combine with optional chaining and nullish coalescing.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🔎 Structural Typing (vs Nominal)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
TS uses &lt;strong&gt;structural typing&lt;/strong&gt; — compatibility is based on shape, not declared type.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Coord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Coord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅ works (same shape)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Extra properties are rejected in &lt;strong&gt;object literals&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// ❌ error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;But extra props are allowed if passed as variable:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅ works&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TypeScript is structurally typed — if it quacks like a duck, it’s assignable. But object literals have stricter excess property checks.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 📝 Type Aliases vs Interfaces
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Two ways to define object types.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Differences
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interface:&lt;/strong&gt; extendable via declaration merging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Alias:&lt;/strong&gt; supports unions, intersections, primitives.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// merged&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// no merging, must intersect&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prefer &lt;code&gt;interface&lt;/code&gt; for public APIs (extendable).&lt;/li&gt;
&lt;li&gt;Prefer &lt;code&gt;type&lt;/code&gt; for unions and complex compositions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Interfaces are open (mergeable), types are closed but more flexible (unions, intersections). Use each where it fits.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 📦 Enums vs Literal Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Enums
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;Direction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Up&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Down&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Literal Unions
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Direction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;up&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;down&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;String literal unions&lt;/strong&gt; are usually better (type-safe, no runtime overhead).&lt;/li&gt;
&lt;li&gt;Enums generate runtime objects → heavier.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;const enum&lt;/code&gt; is inlined at compile time but can break tooling.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Prefer literal unions over enums — they’re lighter and more type-safe. Use enums only when runtime mapping is required.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Advanced Types
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. ➕ Union &amp;amp; Intersection Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Union (&lt;code&gt;|&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Represents &lt;strong&gt;either type&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;               &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Intersection (&lt;code&gt;&amp;amp;&lt;/code&gt;)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Combines multiple types.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Worker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;company&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="c1"&gt;// { name: string; company: string }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Union narrows to shared members:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// works (length exists on both)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Intersection of incompatible types → &lt;code&gt;never&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Impossible&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// never&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Unions = OR, intersections = AND. Incompatible intersections collapse to never.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🔢 Literal Types &amp;amp; Const Assertions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Literal Types
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;up&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;down&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;up&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;span class="nx"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;left&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ❌&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ &lt;code&gt;as const&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Locks values into literal types.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;green&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// "red" | "green"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Literal types restrict values to exact strings/numbers. &lt;code&gt;as const&lt;/code&gt; freezes arrays/objects for inference.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 📝 Template Literal Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build strings at type level.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`on&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;Capitalize&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// "onClick" | "onHover"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Use Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Event handler names.&lt;/li&gt;
&lt;li&gt;Typed CSS props.&lt;/li&gt;
&lt;li&gt;API route patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Template literal types compose strings at type level — great for event names, routes, and API typings.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🧮 Conditional Types
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;T extends U ? X : Y&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;IsString&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;IsString&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;IsString&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Distributive Behavior
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ToArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;C&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ToArray&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// string[] | number[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Distribution only happens on &lt;strong&gt;naked type parameters&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use brackets to disable:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NoDistrib&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Conditional types let you branch at type level. By default they distribute over unions.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🗂️ Mapped Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Basics
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;OptionsFlags&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Features&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;darkMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;OptionsFlags&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Features&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="c1"&gt;// { darkMode: boolean }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Modifiers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;readonly&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;?&lt;/code&gt; optional&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-readonly&lt;/code&gt; / &lt;code&gt;-?&lt;/code&gt; to remove
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Mutable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Mapped types iterate over keys to transform shape — add/remove optionality, readonly, etc.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🛠️ Utility Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Built-ins
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Partial&amp;lt;T&amp;gt;&lt;/code&gt; → all optional&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Required&amp;lt;T&amp;gt;&lt;/code&gt; → all required&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Readonly&amp;lt;T&amp;gt;&lt;/code&gt; → all readonly&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pick&amp;lt;T, K&amp;gt;&lt;/code&gt; → subset&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Omit&amp;lt;T, K&amp;gt;&lt;/code&gt; → all except&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Record&amp;lt;K, V&amp;gt;&lt;/code&gt; → dict type&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ReturnType&amp;lt;T&amp;gt;&lt;/code&gt; → infer fn return&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Parameters&amp;lt;T&amp;gt;&lt;/code&gt; → tuple of args&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;InstanceType&amp;lt;T&amp;gt;&lt;/code&gt; → type of &lt;code&gt;new T()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Todo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;done&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;TodoDraft&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Partial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Todo&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// all optional&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Utility types like Partial, Pick, Omit, Record abstract common transformations of object types.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🧩 Key Remapping in Mapped Types (TS 4.1+)
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Prefix&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="s2"&gt;`on&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;Capitalize&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Prefix&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// { onClick: () =&amp;gt; void }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Mapped types can rename keys dynamically using &lt;code&gt;as&lt;/code&gt; clauses and template literals.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🌀 Recursive &amp;amp; Deep Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Recursive Types
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;JSONValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;JSONValue&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="na"&gt;k&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;JSONValue&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Deep Utility
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;DeepPartial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]?:&lt;/span&gt; &lt;span class="nx"&gt;DeepPartial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deep recursion can slow compiler dramatically.&lt;/li&gt;
&lt;li&gt;Use cautiously in very large codebases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Recursive types enable JSON-like structures and deep utilities, but may hit compiler perf limits.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Generics in Depth
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🧩 Generic Functions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Functions parameterized with type variables.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;identity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// inferred as number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Generics make functions reusable across types, with inference for convenience.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🔒 Constraints (&lt;code&gt;extends&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Restrict generics to a subset of types.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getLength&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;getLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;span class="nf"&gt;getLength&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;    &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;span class="nf"&gt;getLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         &lt;span class="c1"&gt;// ❌&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Constraints limit generics with &lt;code&gt;extends&lt;/code&gt;, allowing access to known members.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🏷️ Generic Interfaces &amp;amp; Classes
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Interfaces
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stringBox&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Classes
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Container&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Generics extend beyond functions — interfaces and classes can also be parameterized.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. ⚖️ Default Generic Parameters
&lt;/h2&gt;

&lt;p&gt;Provide defaults for flexibility.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;error&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApiResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// T defaults to any&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Defaults reduce boilerplate when generic type can be inferred or safely assumed.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🔄 Keyof &amp;amp; Indexed Access with Generics
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Keyof
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Keys&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UKeys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Keys&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "id" | "name"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Indexed Access
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;NameType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Value&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Keyof + indexed access lets you make type-safe utilities (like Pick/Omit).”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🎭 Conditional Generics
&lt;/h2&gt;

&lt;p&gt;Generics inside conditional types = super powerful.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Flatten&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Flatten&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// string&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Flatten&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Conditional generics let you branch inside generics — e.g., flatten arrays, unwrap promises.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. ⚖️ Variance (Covariance vs Contravariance)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
How subtyping interacts with generics.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Covariance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Safe to use subtype in place of supertype.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Contravariance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Function parameters are contravariant:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Fn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Fn&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript uses &lt;strong&gt;bivariant function parameters&lt;/strong&gt; by default for compatibility (unsafe but practical).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--strictFunctionTypes&lt;/code&gt; enforces contravariance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Function parameters are contravariant, return types are covariant. TS is bivariant by default unless strictFunctionTypes is on.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🌀 Higher-Kinded Types (HKTs, Workarounds)
&lt;/h2&gt;

&lt;p&gt;TypeScript doesn’t support true HKTs (types parameterized over type constructors), but you can simulate.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Functor&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;F&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;fa&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;F&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;F&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or libraries like &lt;code&gt;fp-ts&lt;/code&gt; emulate HKT with encoding tricks.&lt;/p&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TypeScript lacks HKTs, but libraries like fp-ts emulate them with encoding patterns.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  9. 🔗 Generics in React
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Typing &lt;code&gt;useState&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setVal&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Typing &lt;code&gt;useReducer&lt;/code&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useReducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Typing Props
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Generics in React type hooks, props, reducers, and flexible components (e.g., polymorphic components).”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Type Inference &amp;amp; Compatibility
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🔍 Type Inference Basics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
TypeScript infers types when not explicitly annotated.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Examples
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;      &lt;span class="c1"&gt;// inferred as number&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;  &lt;span class="c1"&gt;// inferred as number[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Contextual Typing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Function parameters infer type from usage:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmousedown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// e inferred as MouseEvent&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Type inference works both from initializer values and from context (like callbacks).”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. ⚖️ Excess Property Checks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
TypeScript enforces stricter checks for object &lt;strong&gt;literals&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;u1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// ❌ excess property&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tmp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;u2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅ allowed (assignment, not literal)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Literal checks prevent typos in inline objects.&lt;/li&gt;
&lt;li&gt;Assigning via variable bypasses check.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Object literals get extra checks for unknown properties. Assign via variable to bypass.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🔄 Type Widening &amp;amp; Narrowing
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Widening
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Without &lt;code&gt;as const&lt;/code&gt;, literal types widen:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// type string (widened)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// type "hi" (literal)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Narrowing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Control-flow analysis narrows union types:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// narrowed to string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;let x = null&lt;/code&gt; → type is &lt;code&gt;any&lt;/code&gt; unless strictNullChecks.&lt;/li&gt;
&lt;li&gt;Arrays widen unless frozen with &lt;code&gt;as const&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TS widens literals by default. Use &lt;code&gt;as const&lt;/code&gt; to keep narrow literal types.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🏷️ Assignability &amp;amp; Compatibility
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
TypeScript is &lt;strong&gt;structurally typed&lt;/strong&gt; → assignability depends on shape.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Coord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;z&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Point&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Coord&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// ✅ works&lt;/span&gt;
&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;             &lt;span class="c1"&gt;// ✅ works (z optional)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Function parameters are &lt;strong&gt;bivariant&lt;/strong&gt; by default (unsafe).&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;strictFunctionTypes&lt;/code&gt; for true contravariance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TS uses structural typing: if shapes match, types are compatible. Functions default to bivariant params unless strict.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🧩 &lt;code&gt;any&lt;/code&gt; vs &lt;code&gt;unknown&lt;/code&gt; vs &lt;code&gt;never&lt;/code&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ any
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Opt-out of type checking.&lt;/li&gt;
&lt;li&gt;Can be assigned to/from anything.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// compiles, runtime error&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ unknown
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Top type (safe any).&lt;/li&gt;
&lt;li&gt;Must be narrowed before use.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ❌ error&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ never
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bottom type (no value possible).&lt;/li&gt;
&lt;li&gt;Used in exhaustiveness checks.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_exhaustive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅ ensures all cases handled&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;any&lt;/code&gt; disables safety, &lt;code&gt;unknown&lt;/code&gt; forces narrowing, &lt;code&gt;never&lt;/code&gt; represents impossible cases.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🧠 Inference in Functions
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Return Inference
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// inferred as number&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Generic Inference
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// v: string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes inference is &lt;strong&gt;too wide&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// inferred as string, not "a"|"b"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;→ Fix with &lt;code&gt;as const&lt;/code&gt; or explicit typing.&lt;/p&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Function return types are inferred, but unions may widen. Use &lt;code&gt;as const&lt;/code&gt; or annotations for precision.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🛠️ Type Compatibility in Enums
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Numeric Enums
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Compatible with numbers.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;Dir&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Up&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Down&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ String Enums
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Not compatible with strings unless explicitly.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;Color&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Red&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ❌&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Numeric enums are assignable to numbers, but string enums require exact matches.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. ⚡ Type Compatibility in Tuples vs Arrays
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Tuples
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Pair&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Pair&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Tuples have fixed length, arrays are flexible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✅ allowed! TS doesn’t enforce length at runtime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Tuples enforce order but not length at runtime — they’re arrays under the hood.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Type Safety in JavaScript Interop
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 📜 Ambient Declarations (&lt;code&gt;declare&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Tell TypeScript about variables/modules that exist at runtime (JS), but aren’t defined in TS code.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Examples
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;VERSION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;VERSION&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// TS knows VERSION is string&lt;/span&gt;

&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;legacy-lib&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;legacyFn&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Declarations don’t generate runtime code — only inform compiler.&lt;/li&gt;
&lt;li&gt;If declaration doesn’t match actual runtime → runtime errors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;declare&lt;/code&gt; informs the type system about external JS values but doesn’t emit code. Accuracy is critical or you’ll get runtime errors.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 📦 Type Declarations for JS Libraries
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Strategies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;@types packages&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; @types/lodash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manual &lt;code&gt;d.ts&lt;/code&gt; files&lt;/strong&gt; for missing types:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// lodash.d.ts&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lodash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;chunk&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[][];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If types are outdated/mismatched → TS lies about API.&lt;/li&gt;
&lt;li&gt;Can “augment” instead of redefining (see below).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Missing types for JS libs? Install &lt;code&gt;@types&lt;/code&gt; or write &lt;code&gt;.d.ts&lt;/code&gt; files — but keep them accurate with the runtime.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🧩 Module Augmentation &amp;amp; Declaration Merging
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Extend existing module or type definitions without rewriting.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// add a method to lodash&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;module&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lodash&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;customHello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Declaration Merging
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Interfaces with the same name merge:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Augmentation is global → can cause conflicts across packages.&lt;/li&gt;
&lt;li&gt;Prefer module augmentation for libs, not &lt;code&gt;any&lt;/code&gt; hacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Declaration merging/augmentation extends types safely. Useful for adding custom fields or extending 3rd-party libraries.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🎯 &lt;code&gt;as const&lt;/code&gt; for Safe Interop
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;as const&lt;/code&gt; freezes literals into &lt;strong&gt;readonly&lt;/strong&gt; narrow types.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;roles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;guest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; 
&lt;span class="c1"&gt;// "admin" | "user" | "guest"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Use Case
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ensures config/constants match at runtime.&lt;/li&gt;
&lt;li&gt;Great for enums/union types from JS arrays.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;as const&lt;/code&gt; locks JS literals into readonly narrow types — perfect for role lists, config, or enum-like structures.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. ⚙️ &lt;code&gt;tsconfig&lt;/code&gt; Strictness Flags
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Important Flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;strict&lt;/code&gt; → enables all strict checks.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;noImplicitAny&lt;/code&gt; → no silent &lt;code&gt;any&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;strictNullChecks&lt;/code&gt; → enforce explicit nullability.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;noUncheckedIndexedAccess&lt;/code&gt; → array lookups can return &lt;code&gt;undefined&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;exactOptionalPropertyTypes&lt;/code&gt; → &lt;code&gt;?&lt;/code&gt; means strictly optional.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Teams often disable strictness → leaks &lt;code&gt;any&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Migrating large JS → TS requires &lt;strong&gt;incremental adoption&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Always enable &lt;code&gt;strict&lt;/code&gt;. Key flags like &lt;code&gt;noImplicitAny&lt;/code&gt; and &lt;code&gt;strictNullChecks&lt;/code&gt; catch hidden bugs in JS interop.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🛠️ Working with Untyped JS Objects
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;unknown&lt;/code&gt; + type guards:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Or validate at runtime with &lt;strong&gt;Zod/io-ts&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;zod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;infer&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Untyped JS objects should be validated at runtime with schemas (Zod/io-ts), not just trusted via &lt;code&gt;any&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🔗 Migrating JS → TS (Gradual Typing)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Strategies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rename &lt;code&gt;.js&lt;/code&gt; → &lt;code&gt;.ts&lt;/code&gt; or &lt;code&gt;.tsx&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;allowJs&lt;/code&gt; + &lt;code&gt;checkJs&lt;/code&gt; in tsconfig to gradually type JS.&lt;/li&gt;
&lt;li&gt;Add JSDoc annotations:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * @param {string} name
 * @returns {string}
 */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;TS infers types from JSDoc until converted.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JSDoc typing is weaker than TS proper.&lt;/li&gt;
&lt;li&gt;Incremental migration often mixes &lt;code&gt;any&lt;/code&gt; → must clean up later.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Migrate JS → TS gradually: enable &lt;code&gt;checkJs&lt;/code&gt;, add JSDoc types, then refactor into full TypeScript.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🛡️ Runtime vs Compile-Time Safety
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Core Rule:&lt;/strong&gt;&lt;br&gt;
Types vanish at runtime → if interoping with JS, you need &lt;strong&gt;runtime checks&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;safeParse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;safeParse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;not-json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// type unknown&lt;/span&gt;
&lt;span class="c1"&gt;// must validate before using&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TypeScript only checks at compile time. For JS interop, add runtime validation to truly guarantee safety.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Type Guards &amp;amp; Narrowing
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🔎 Built-in Type Guards: &lt;code&gt;typeof&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;typeof&lt;/code&gt; lets TypeScript narrow primitive types.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// val: string&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;    &lt;span class="c1"&gt;// val: number&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Only works on &lt;strong&gt;primitives&lt;/strong&gt;: &lt;code&gt;"string" | "number" | "boolean" | "bigint" | "symbol" | "undefined" | "object" | "function"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Doesn’t differentiate &lt;code&gt;null&lt;/code&gt; vs &lt;code&gt;object&lt;/code&gt; (&lt;code&gt;typeof null === "object"&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;typeof&lt;/code&gt; for primitives — but note &lt;code&gt;typeof null === 'object'&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🏗️ Built-in Type Guards: &lt;code&gt;instanceof&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Narrow objects by checking prototype chain.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Error&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// string&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Only works with classes/constructors (not plain objects).&lt;/li&gt;
&lt;li&gt;Inheritance hierarchy is respected.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;instanceof&lt;/code&gt; for class-based narrowing — it checks prototype chain.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🧩 In-Operator Narrowing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Check if a property exists in object → narrows union.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;meow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Cat&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;meow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;meow&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bark&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The &lt;code&gt;in&lt;/code&gt; operator narrows unions by checking for property existence.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🏷️ Discriminated (Tagged) Unions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Unions with a common literal field (“tag”) for safe narrowing.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;side&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;area&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;side&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Discriminated unions use a common literal field to guarantee safe narrowing in switches.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🛠️ Custom Type Predicates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
User-defined functions that tell TS a condition implies a type.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;isString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Custom type predicates (&lt;code&gt;x is T&lt;/code&gt;) let you teach TS how to narrow beyond built-ins.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🚦 Exhaustiveness Checking with &lt;code&gt;never&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Force handling all cases in a union.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;perimeter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;circle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;square&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_exhaustive&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// compile error if new case added&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;_exhaustive&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Exhaustiveness checks with &lt;code&gt;never&lt;/code&gt; ensure all union cases are handled — future-proofing code.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🧠 Control Flow Analysis
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
TS tracks variables through branches to narrow automatically.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="c1"&gt;// x is now string, since null was filtered out&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TS is &lt;strong&gt;flow-sensitive&lt;/strong&gt; — order matters.&lt;/li&gt;
&lt;li&gt;Reassignments can widen again.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TS narrows types flow-sensitively — once a check passes, TS refines type until reassignment.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🧩 Assertion Functions (TS 3.7+)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Custom functions that throw on invalid values while narrowing type.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;assertIsString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;asserts&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Not a string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;shout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;assertIsString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// x: string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Assertion functions throw at runtime and tell TS the variable is narrowed if no error occurs.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  9. 📦 Combining Guards
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;          &lt;span class="c1"&gt;// null/undefined filtered&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;    &lt;span class="c1"&gt;// narrowed to string&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;            &lt;span class="c1"&gt;// number&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Combine guards (&lt;code&gt;== null&lt;/code&gt;, &lt;code&gt;typeof&lt;/code&gt;, &lt;code&gt;instanceof&lt;/code&gt;) for precise narrowing of complex unions.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Advanced Patterns
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🏷️ Branded Types (Nominal Typing in TS)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
TS is &lt;strong&gt;structural&lt;/strong&gt; — &lt;code&gt;type UserId = string&lt;/code&gt; is indistinguishable from any &lt;code&gt;string&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
Add a “brand” field to enforce nominal typing.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;__brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;UserId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;UserId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;UserId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;span class="nf"&gt;getUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;random&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         &lt;span class="c1"&gt;// ❌ must be branded&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Branded types simulate nominal typing in TS, preventing accidental mixing of structurally identical types.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🌀 Opaque Types
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Similar to branded types, but completely hide the underlying type from consumers.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Opaque&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;__TYPE__&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Opaque&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;UserId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createUserId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;UserId&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;UserId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Opaque types hide implementation details and prevent misuse, forcing controlled constructors.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🛠️ Recursive Utility Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ DeepPartial
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;DeepPartial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]?:&lt;/span&gt; &lt;span class="nx"&gt;DeepPartial&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ DeepReadonly
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;DeepReadonly&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;DeepReadonly&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deep recursion can slow down compiler.&lt;/li&gt;
&lt;li&gt;Use selectively in large projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Recursive types enable deep utilities like DeepPartial, but heavy use impacts compiler performance.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🧩 Conditional &amp;amp; Mapped Utilities
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ NonNullable
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nb"&gt;NonNullable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Diff
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Diff&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Overwrite
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Overwrite&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Omit&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Mapped + conditional types let you build powerful utilities like Diff, Overwrite, NonNullable.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🔄 Variadic Tuple Types
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Model tuples of variable length with generics.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Push&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;V&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;T1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Push&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// [1,2,3]&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Concat&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;T2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Concat&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// [1,2,3,4]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Variadic tuple types let you append, prepend, or merge tuples while preserving type precision.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🏗️ Builder Pattern in TypeScript
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RequestBuilder&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nf"&gt;setUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;setMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GET&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RequestBuilder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;setUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;setMethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Builder patterns ensure chained configuration APIs with type safety and autocomplete.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🛡️ Exact Types (Prevent Excess Keys)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt;&lt;br&gt;
TS normally allows extra props via assignment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
Create an &lt;code&gt;Exact&amp;lt;T, U&amp;gt;&lt;/code&gt; utility.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Exact&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;K&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;Exclude&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;U&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;keyof&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;]?:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Person&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Exact&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; 
&lt;span class="c1"&gt;// ❌ error: extra 'age'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Exact types prevent excess keys, useful for APIs where only known fields are allowed.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 📦 Extracting Types from Values
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ typeof + keyof
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;guest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;roles&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; 
&lt;span class="c1"&gt;// "admin" | "user" | "guest"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;typeof&lt;/code&gt; and &lt;code&gt;as const&lt;/code&gt; to derive union types from runtime values like config arrays.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  9. 🧠 Phantom Types (Static Guarantees)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Types that exist only at compile-time, to encode invariants.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Celsius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;__unit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Celsius&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Fahrenheit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;__unit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fahrenheit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Celsius&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Fahrenheit&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Fahrenheit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Celsius&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Celsius&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;toF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✅&lt;/span&gt;
&lt;span class="nf"&gt;toF&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Fahrenheit&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ❌&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Phantom types enforce domain-specific rules (like units) without runtime cost.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 TypeScript in React
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🎯 Typing Component Props
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Functional Components
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ButtonProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ButtonProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;React.FC&lt;/code&gt; implicitly adds &lt;code&gt;children&lt;/code&gt; prop — often unwanted.&lt;/li&gt;
&lt;li&gt;Better to type &lt;code&gt;children&lt;/code&gt; explicitly.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Prefer explicit prop typing over &lt;code&gt;React.FC&lt;/code&gt; to avoid hidden &lt;code&gt;children&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🏷️ Children Typing
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Common Patterns
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// anything renderable&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Props2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactElement&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// exactly one element&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Props3&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// render prop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;ReactNode&lt;/code&gt; for generic children, &lt;code&gt;ReactElement&lt;/code&gt; for single elements, and functions for render props.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🧩 Typing Hooks (&lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;useReducer&lt;/code&gt;)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ useState
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// explicit&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// inferred as string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useState&amp;lt;T | null&amp;gt;(null)&lt;/code&gt; when initial value is null.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ useReducer
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Action&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useReducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Type state &amp;amp; actions explicitly in hooks. Use union types for reducers.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🌐 Typing Context Providers
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;UserContextType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;setUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;u&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;UserContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;UserContextType&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useUser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;UserContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;useUser must be inside UserProvider&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Context values should include both data and setters, wrapped in a custom hook for safety.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🧵 Typing Refs &amp;amp; forwardRef
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ DOM Refs
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HTMLInputElement&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ forwardRef
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;InputProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forwardRef&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HTMLInputElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;InputProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ useImperativeHandle
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Handle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CustomInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forwardRef&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Handle&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HTMLInputElement&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;useImperativeHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;forwardRef&lt;/code&gt; with generic ref types. Expose imperative APIs with &lt;code&gt;useImperativeHandle&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🧮 Typing Higher-Order Components (HOCs)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;withLoading&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ComponentType&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt; : &amp;lt;Component {...props} /&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Must preserve props (&lt;code&gt;T&lt;/code&gt;) and merge with new ones.&lt;/li&gt;
&lt;li&gt;Watch out for lost generics when wrapping.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“HOCs should preserve original props via generics and merge additional ones.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🧑‍🔬 Typing Generic Components
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;ListProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nl"&gt;render&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;item&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;ListProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ul&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/ul&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;List&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]}&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/li&amp;gt;} /&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Generic components let props depend on type parameters — perfect for reusable lists and tables.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🔄 Typing Event Handlers
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleChange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ChangeEvent&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;HTMLInputElement&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Common Event Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;React.MouseEvent&amp;lt;HTMLButtonElement&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;React.ChangeEvent&amp;lt;HTMLInputElement&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;React.FormEvent&amp;lt;HTMLFormElement&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use React’s synthetic event types (MouseEvent, ChangeEvent) for handlers, parameterized by element type.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  9. 🧩 Typing Polymorphic &lt;code&gt;as&lt;/code&gt; Components
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;PolymorphicProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ElementType&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ComponentProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ElementType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="nx"&gt;PolymorphicProps&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Box&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Link&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Box&amp;gt;; /&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;safe&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Polymorphic components use &lt;code&gt;as&lt;/code&gt; + generics + &lt;code&gt;ComponentProps&amp;lt;T&amp;gt;&lt;/code&gt; to forward correct props.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Performance &amp;amp; Scaling TypeScript
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. ⚡ Type-Checking Performance in Large Projects
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Common Bottlenecks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deeply nested conditional types.&lt;/li&gt;
&lt;li&gt;Overuse of recursive mapped types (e.g., DeepPartial, DeepReadonly).&lt;/li&gt;
&lt;li&gt;Giant union types (e.g., &lt;code&gt;"A" | "B" | ... | "Z"&lt;/code&gt; with hundreds of members).&lt;/li&gt;
&lt;li&gt;Heavy &lt;code&gt;infer&lt;/code&gt; usage inside generics.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tsc --diagnostics&lt;/code&gt; → measure type-check performance.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tsc --extendedDiagnostics&lt;/code&gt; → detailed breakdown (parse time, check time, emit time).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The biggest type-check killers are deep recursion, massive unions, and heavy conditional types — profile with &lt;code&gt;--diagnostics&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🛠️ Avoiding Over-Complex Types
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Problem
&lt;/h3&gt;

&lt;p&gt;Some teams abuse TS to encode too much at type level.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Crazy&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; 
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; 
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;num&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; 
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;never&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Hard to maintain, slows compiler.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Guidelines
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keep types simple for DX (developer experience).&lt;/li&gt;
&lt;li&gt;Don’t encode logic that belongs in &lt;strong&gt;runtime code&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Prefer branded/opaque types for safety, instead of extreme conditional gymnastics.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Don’t over-engineer types — TS is for safety, not replacing runtime logic.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 📦 Build Pipelines: &lt;code&gt;tsc&lt;/code&gt; vs Babel vs SWC
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ tsc
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Full type-checker + emit.&lt;/li&gt;
&lt;li&gt;Slowest, but canonical.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Babel with &lt;code&gt;@babel/preset-typescript&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Strips types → &lt;strong&gt;no type-checking&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Fast, but must run &lt;code&gt;tsc --noEmit&lt;/code&gt; separately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ SWC (used in Next.js, Vite, Turborepo)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rust-based transpiler, very fast.&lt;/li&gt;
&lt;li&gt;Strips types only.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Babel/SWC do not catch type errors — must run type-check separately in CI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use SWC/Babel for fast builds, but keep &lt;code&gt;tsc --noEmit&lt;/code&gt; in CI for type safety.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🔄 Incremental Compilation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"incremental": true&lt;/code&gt; in &lt;code&gt;tsconfig.json&lt;/code&gt; → saves &lt;code&gt;.tsbuildinfo&lt;/code&gt; cache.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"composite": true&lt;/code&gt; for project references (multi-package repos).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Only re-check changed files.&lt;/li&gt;
&lt;li&gt;Required for monorepos with shared libraries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Enable &lt;code&gt;incremental&lt;/code&gt; + &lt;code&gt;composite&lt;/code&gt; in tsconfig to avoid full re-checks in large repos.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🧩 Project References (Scaling Monorepos)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Break project into multiple sub-projects with &lt;strong&gt;clear build boundaries&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;tsconfig.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"files"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"references"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./packages/ui"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./packages/server"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Faster builds (independent packages).&lt;/li&gt;
&lt;li&gt;Enforces dependency contracts.&lt;/li&gt;
&lt;li&gt;Works great with Nx/Turborepo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Project references let you split large codebases into smaller typed units with enforced contracts.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🧠 Type-Only Imports &amp;amp; Exports (TS 3.8+)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// stripped at runtime&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Avoids accidentally bundling type-only modules.&lt;/li&gt;
&lt;li&gt;Reduces unnecessary runtime imports.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;import type&lt;/code&gt; and &lt;code&gt;export type&lt;/code&gt; to ensure pure type imports don’t affect runtime bundles.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. ⚖️ Managing &lt;code&gt;any&lt;/code&gt; at Scale
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Problems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;any&lt;/code&gt; spreads like a virus in codebases.&lt;/li&gt;
&lt;li&gt;One &lt;code&gt;any&lt;/code&gt; can propagate through dozens of types.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Solutions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;unknown&lt;/code&gt; instead of &lt;code&gt;any&lt;/code&gt; when possible.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;eslint&lt;/code&gt; rules (&lt;code&gt;@typescript-eslint/no-explicit-any&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Introduce “escape hatches” (&lt;code&gt;TODO: fix any&lt;/code&gt;) but track debt.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Manage &lt;code&gt;any&lt;/code&gt; aggressively — prefer &lt;code&gt;unknown&lt;/code&gt;, enforce lint rules, and track escape hatches.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 📊 Large Codebase Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Strict mode always (&lt;code&gt;strict: true&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;✅ Type-only imports (&lt;code&gt;import type&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;✅ Use &lt;strong&gt;Zod/io-ts&lt;/strong&gt; for runtime validation of API responses.&lt;/li&gt;
&lt;li&gt;✅ Add &lt;code&gt;tsc --noEmit&lt;/code&gt; in CI to enforce type safety.&lt;/li&gt;
&lt;li&gt;✅ Use &lt;code&gt;paths&lt;/code&gt; in &lt;code&gt;tsconfig.json&lt;/code&gt; for clean imports.&lt;/li&gt;
&lt;li&gt;✅ Monitor &lt;code&gt;tsc --diagnostics&lt;/code&gt; to spot type-check slowdowns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Large TS projects succeed when strict mode, type-only imports, runtime validation, and CI type-checks are enforced.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Ecosystem &amp;amp; Future
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🧩 Decorators (Stage 3 Proposal)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Annotations for classes, methods, and properties.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;readonly&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;writable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;readonly&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Use Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dependency injection (NestJS).&lt;/li&gt;
&lt;li&gt;ORMs (TypeORM, Prisma).&lt;/li&gt;
&lt;li&gt;Metadata reflection.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Still experimental — syntax differs across versions.&lt;/li&gt;
&lt;li&gt;Requires &lt;code&gt;"experimentalDecorators": true&lt;/code&gt; in &lt;code&gt;tsconfig.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Decorators add metadata to classes/members — useful in frameworks like NestJS, but still experimental in TS.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 📜 Type Annotations in JavaScript (TC39 Proposal)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
JavaScript itself may gain &lt;strong&gt;type syntax&lt;/strong&gt; (stripped at runtime).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Example (future JS)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Types would be &lt;strong&gt;ignored at runtime&lt;/strong&gt;, like TS today.&lt;/li&gt;
&lt;li&gt;TS would align with native JS type syntax.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“JS is moving toward built-in type annotations. TS will align, making gradual adoption easier.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. ⚖️ TypeScript vs Flow vs Others
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ TypeScript
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mainstream, broad ecosystem.&lt;/li&gt;
&lt;li&gt;Stronger tooling, VSCode integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Flow (Meta)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Better type inference in theory.&lt;/li&gt;
&lt;li&gt;Lost adoption due to ecosystem fragmentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Elm / ReasonML / PureScript
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Stronger type systems, but niche.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“TS won the ecosystem war — Flow and others have niche uses, but TS dominates frontend and Node.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🆕 New &amp;amp; Recent TS Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ &lt;code&gt;satisfies&lt;/code&gt; Operator (TS 4.9)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;secondary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;satisfies&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Ensures structure &lt;strong&gt;without widening&lt;/strong&gt; values.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ &lt;code&gt;const&lt;/code&gt; Type Parameters (coming soon)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;tuple&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// type ["a", "b"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Variance Annotations (future)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Explicitly mark generics as &lt;code&gt;in&lt;/code&gt; (contravariant) or &lt;code&gt;out&lt;/code&gt; (covariant).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Features like &lt;code&gt;satisfies&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; generics improve precision without hacks — future TS is about better inference + clarity.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🏗️ Migration Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ JS → TS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enable &lt;code&gt;allowJs&lt;/code&gt; + &lt;code&gt;checkJs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Rename &lt;code&gt;.js&lt;/code&gt; → &lt;code&gt;.ts&lt;/code&gt; gradually.&lt;/li&gt;
&lt;li&gt;Add strict config (&lt;code&gt;noImplicitAny&lt;/code&gt;, &lt;code&gt;strictNullChecks&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Replace JSDoc with real types.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Flow → TS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use codemods (&lt;code&gt;flow-to-ts&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Incrementally replace types.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Legacy TS → Modern
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Remove &lt;code&gt;namespace&lt;/code&gt; in favor of ES modules.&lt;/li&gt;
&lt;li&gt;Switch to &lt;code&gt;strict&lt;/code&gt; mode.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;/// &amp;lt;reference&amp;gt;&lt;/code&gt; with proper imports.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Migrate incrementally: JS → TS with &lt;code&gt;checkJs&lt;/code&gt;, Flow → TS with codemods, legacy TS → strict modules.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🏢 TypeScript at Scale
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Observations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;At very large scale (10M+ LOC), TS type-checking can bottleneck.&lt;/li&gt;
&lt;li&gt;Some companies (Google, Meta) experiment with &lt;strong&gt;faster type-checkers&lt;/strong&gt; (SWC, Rome, incremental builds).&lt;/li&gt;
&lt;li&gt;Types become &lt;strong&gt;API contracts&lt;/strong&gt; between teams — not just safety.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“At scale, TypeScript types are contracts between teams. Performance requires project references + incremental builds.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🔮 Future of TypeScript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Trends
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Closer alignment with JavaScript (native type annotations).&lt;/li&gt;
&lt;li&gt;Better inference (const generics, variance).&lt;/li&gt;
&lt;li&gt;Compiler performance improvements (Rust-based checkers like &lt;code&gt;tsc-swc&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;More runtime type-checking integration (Zod + TS).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The future of TS is tighter JS integration, better inference, and faster compilers — runtime validation will bridge static gaps.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ✅ Summary (Full Handbook)
&lt;/h1&gt;

&lt;p&gt;This TypeScript handbook covers staff/architect-level depth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fundamentals (type system vs runtime, primitives, assertions, narrowing, null checks, structural typing, interfaces vs types, enums vs literal types)&lt;/li&gt;
&lt;li&gt;Advanced Types (unions, intersections, literals, const assertions, template literals, conditional, mapped, utility types, recursive types)&lt;/li&gt;
&lt;li&gt;Generics (functions, constraints, defaults, keyof/indexed access, conditional generics, variance, HKTs, React generics)&lt;/li&gt;
&lt;li&gt;Type Inference &amp;amp; Compatibility (inference, widening/narrowing, assignability, any vs unknown vs never, enums, tuples vs arrays)&lt;/li&gt;
&lt;li&gt;JavaScript Interop (ambient declarations, @types, module augmentation, declaration merging, as const, tsconfig strictness, runtime validation, gradual migration)&lt;/li&gt;
&lt;li&gt;Type Guards &amp;amp; Narrowing (typeof, instanceof, in-operator, discriminated unions, custom predicates, assertion functions, exhaustiveness checks)&lt;/li&gt;
&lt;li&gt;Advanced Patterns (branded types, opaque types, recursive utilities, mapped utilities, variadic tuples, builder pattern, exact types, phantom types)&lt;/li&gt;
&lt;li&gt;TypeScript in React (props, children, hooks, context, refs, HOCs, generic components, event handlers, polymorphic components)&lt;/li&gt;
&lt;li&gt;Performance &amp;amp; Scaling (diagnostics, avoiding complex types, Babel/SWC vs tsc, incremental compilation, project references, import type, managing any, best practices)&lt;/li&gt;
&lt;li&gt;Ecosystem &amp;amp; Future (decorators, JS type annotations proposal, TS vs Flow, new features like satisfies/const generics, migration strategies, TS at scale, future trends)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>React Expert Revision Handbook</title>
      <dc:creator>Animesh Pandey</dc:creator>
      <pubDate>Sun, 31 Aug 2025 19:16:01 +0000</pubDate>
      <link>https://forem.com/anmshpndy/react-expert-revision-handbook-og1</link>
      <guid>https://forem.com/anmshpndy/react-expert-revision-handbook-og1</guid>
      <description>&lt;h2&gt;
  
  
  📑 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Core Fundamentals&lt;/li&gt;
&lt;li&gt;State Management&lt;/li&gt;
&lt;li&gt;Performance &amp;amp; Optimization&lt;/li&gt;
&lt;li&gt;Advanced Hooks &amp;amp; Patterns&lt;/li&gt;
&lt;li&gt;Concurrent Features &amp;amp; Architecture&lt;/li&gt;
&lt;li&gt;React and the Browser&lt;/li&gt;
&lt;li&gt;Large-Scale Application Architecture&lt;/li&gt;
&lt;li&gt;React with Data &amp;amp; Networking&lt;/li&gt;
&lt;li&gt;Testing &amp;amp; Quality&lt;/li&gt;
&lt;li&gt;React Ecosystem &amp;amp; Future&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🟦 React Core Fundamentals (Expert Level)
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🎭 Virtual DOM (VDOM)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
The &lt;strong&gt;Virtual DOM&lt;/strong&gt; is a lightweight in-memory tree representation of the actual DOM. React diffs the VDOM against a previous version to compute the minimal set of changes and applies them to the real DOM.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Avoids expensive DOM mutations by batching and diffing.&lt;/li&gt;
&lt;li&gt;Abstracts away browser DOM inconsistencies.&lt;/li&gt;
&lt;li&gt;Works via &lt;strong&gt;reconciliation&lt;/strong&gt; (diffing algorithm).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;VDOM is not always faster — for &lt;strong&gt;simple static pages&lt;/strong&gt;, raw DOM is faster.&lt;/li&gt;
&lt;li&gt;Frequent re-renders of large trees → reconciliation overhead.&lt;/li&gt;
&lt;li&gt;DOM mutations inside &lt;code&gt;useLayoutEffect&lt;/code&gt; or refs can &lt;strong&gt;bypass VDOM&lt;/strong&gt; — can cause sync issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// React maintains a virtual representation&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;When state updates → React creates a new VDOM tree, diffs it with old, and mutates only changed nodes.&lt;/p&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The Virtual DOM is React’s in-memory representation. It enables efficient diffs and minimal DOM updates, though reconciliation itself has cost.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🧮 Reconciliation Algorithm
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
The process of comparing old and new VDOM trees to decide what to update in the real DOM.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Diffing Rules
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Elements of &lt;strong&gt;different types&lt;/strong&gt; → destroy &amp;amp; recreate subtree.&lt;/li&gt;
&lt;li&gt;Elements of &lt;strong&gt;same type&lt;/strong&gt; → update props and recurse.&lt;/li&gt;
&lt;li&gt;Lists → require &lt;strong&gt;keys&lt;/strong&gt; for identity.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keys must be stable and unique&lt;/strong&gt;. Index keys cause bugs if list reorders.&lt;/li&gt;
&lt;li&gt;Changing key forces remount (state reset).&lt;/li&gt;
&lt;li&gt;Deep trees may be skipped if React bails out early (e.g., &lt;code&gt;shouldComponentUpdate&lt;/code&gt; or &lt;code&gt;memo&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Item&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;))}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Reconciliation compares old/new trees. Keys are critical — unstable keys break identity and cause unnecessary remounts.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🧵 React Fiber Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Fiber&lt;/strong&gt; is React’s reimplementation of the reconciliation algorithm as a &lt;strong&gt;linked-list tree of work units&lt;/strong&gt;, enabling incremental rendering and prioritization.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fiber node = virtual stack frame&lt;/strong&gt; (represents component &amp;amp; state).&lt;/li&gt;
&lt;li&gt;Enables &lt;strong&gt;time slicing&lt;/strong&gt;: pause/resume rendering.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Each update has a &lt;strong&gt;priority level (lane)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High → user input.&lt;/li&gt;
&lt;li&gt;Low → background rendering.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fiber means React can &lt;strong&gt;pause rendering mid-tree&lt;/strong&gt; and resume later. Side effects must only run in commit phase.&lt;/li&gt;
&lt;li&gt;Updates may be &lt;strong&gt;interrupted and restarted&lt;/strong&gt; — never rely on render being called exactly once per update.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example (mental model)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Root Fiber → Child Fiber → Sibling Fiber
Each fiber has: type, pendingProps, memoizedState, return, child, sibling
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Fiber is React’s linked-list architecture that enables pausing, resuming, and prioritizing work. Render is interruptible, commit is not.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. ⚙️ React Rendering Phases
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React rendering happens in &lt;strong&gt;two phases&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Render Phase (reconciliation):&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Build Fiber tree, diff with old tree.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pure &amp;amp; interruptible&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Commit Phase:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Apply DOM mutations.&lt;/li&gt;
&lt;li&gt;Run layout effects (&lt;code&gt;useLayoutEffect&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Trigger lifecycles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synchronous &amp;amp; non-interruptible&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Render can run multiple times per update (especially in StrictMode).&lt;/li&gt;
&lt;li&gt;Side effects must not run in render phase (causes bugs in concurrent mode).&lt;/li&gt;
&lt;li&gt;Layout effects block paint until executed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Render is pure and may be interrupted or restarted. Commit applies changes to the DOM and always runs synchronously.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. ⏳ Component Lifecycle (Class vs Hooks)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Class Lifecycle
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mount:&lt;/strong&gt; constructor → render → componentDidMount&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update:&lt;/strong&gt; render → componentDidUpdate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unmount:&lt;/strong&gt; componentWillUnmount&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Hook Equivalents
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useEffect&lt;/code&gt; → componentDidMount/Update (async, after paint).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useLayoutEffect&lt;/code&gt; → sync after DOM mutation, before paint.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useEffect&lt;/code&gt; cleanup / &lt;code&gt;useLayoutEffect&lt;/code&gt; cleanup → componentWillUnmount.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;StrictMode double-invokes lifecycle methods in dev.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useEffect&lt;/code&gt; runs after paint → may cause flicker for measurements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useLayoutEffect&lt;/code&gt; blocks paint → don’t overuse.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Class lifecycle maps to hooks. &lt;code&gt;useEffect&lt;/code&gt; runs async after paint, &lt;code&gt;useLayoutEffect&lt;/code&gt; runs sync before paint. Use the latter sparingly for DOM measurements.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 📜 Rules of Hooks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Hooks must be called &lt;strong&gt;at the top level of a component or custom hook&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Rules
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Only call hooks in React functions.&lt;/li&gt;
&lt;li&gt;Always call hooks in the same order.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hooks rely on array-like ordering in Fiber.&lt;/li&gt;
&lt;li&gt;Violations break hook state tracking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Conditional hooks → break order.&lt;/li&gt;
&lt;li&gt;Loops with hooks → break order.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Wrong&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cond&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Right&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setX&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cond&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hooks are tracked by call order, not names. That’s why they must run unconditionally at the top level.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🎛️ Context API Internals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Provides a way to pass values deeply without prop drilling.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses a Provider + Consumer (or useContext).&lt;/li&gt;
&lt;li&gt;Each Context has its own Fiber subscription list.&lt;/li&gt;
&lt;li&gt;Any value change triggers re-render for &lt;strong&gt;all consumers&lt;/strong&gt;, unless optimized.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance pitfall&lt;/strong&gt;: Every consumer re-renders even if not using changed parts.&lt;/li&gt;
&lt;li&gt;Fix: split contexts, use memoized values, or libraries like Zustand.&lt;/li&gt;
&lt;li&gt;Don’t store derived values in Context unnecessarily (causes extra re-renders).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ThemeContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"dark"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Child&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Context avoids prop drilling but re-renders all consumers on change. Optimize with memoized values or split contexts.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🎹 Controlled vs Uncontrolled Components
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Controlled:&lt;/strong&gt; Form input state lives in React.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncontrolled:&lt;/strong&gt; Input state lives in DOM, accessed via refs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Tradeoffs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Controlled → easier validation, predictable state, re-render cost.&lt;/li&gt;
&lt;li&gt;Uncontrolled → better performance, harder validation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mixing controlled/uncontrolled on same input → React warning.&lt;/li&gt;
&lt;li&gt;Controlled components must update value on every change.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Controlled&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="c1"&gt;// Uncontrolled&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;defaultValue&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Controlled inputs sync state to React, while uncontrolled rely on the DOM. Controlled are predictable but heavier.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 State Management (Built-in + External)
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🎛️ &lt;code&gt;useState&lt;/code&gt; vs &lt;code&gt;useReducer&lt;/code&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ &lt;code&gt;useState&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simple state, single value updates.
&lt;/li&gt;
&lt;li&gt;Good for UI-local state (inputs, toggles).
&lt;/li&gt;
&lt;li&gt;Updates &lt;strong&gt;replace&lt;/strong&gt; state, not merge.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ &lt;code&gt;useReducer&lt;/code&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;More structured, centralizes update logic.
&lt;/li&gt;
&lt;li&gt;Better for &lt;strong&gt;complex transitions&lt;/strong&gt; or state machines.
&lt;/li&gt;
&lt;li&gt;Reducer function makes updates predictable (pure).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;setState&lt;/code&gt; is async but &lt;strong&gt;batched&lt;/strong&gt; in React 18.
&lt;/li&gt;
&lt;li&gt;Stale closures if accessing state in async callbacks.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;useReducer&lt;/code&gt; is stable across re-renders → avoids dependency hell.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;counterReducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;switch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dec&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="nl"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useReducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;counterReducer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;useState&lt;/code&gt; for simple, isolated state. Use &lt;code&gt;useReducer&lt;/code&gt; when state transitions are complex or when debugging predictability matters.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🌐 Local vs Global State
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Local State
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Component-specific (UI interactions).
&lt;/li&gt;
&lt;li&gt;Keep as local as possible for performance &amp;amp; maintainability.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Global State
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shared across large parts of the app (auth, theme, user data).
&lt;/li&gt;
&lt;li&gt;Can cause &lt;strong&gt;over-rendering&lt;/strong&gt; if managed poorly.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Overusing global state → hard to reason about.
&lt;/li&gt;
&lt;li&gt;Storing &lt;strong&gt;derived values&lt;/strong&gt; globally → redundant re-renders.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Keep state as local as possible. Promote to global only when multiple areas need it — overusing global state makes debugging harder.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 📦 Context API for State
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Good for low-frequency global state (theme, auth, i18n).
&lt;/li&gt;
&lt;li&gt;Bad for high-frequency updates (chat messages, real-time counters).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Performance Pitfall
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Any value change re-renders &lt;strong&gt;all consumers&lt;/strong&gt;, even if they don’t use the changed fields.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Split contexts by domain (AuthContext, ThemeContext).
&lt;/li&gt;
&lt;li&gt;Use memoized values:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AuthContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;useMemo&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Use selector libraries (Zustand, Jotai).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Context works for low-frequency global state, but high-frequency updates cause over-renders. Fix with memoization, splitting, or external stores.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🗃️ Redux
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Strengths
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Predictable state container (single source of truth).
&lt;/li&gt;
&lt;li&gt;Strict unidirectional data flow.
&lt;/li&gt;
&lt;li&gt;Great for debugging (Redux DevTools, time travel).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Weaknesses
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Boilerplate-heavy (reducers, actions).
&lt;/li&gt;
&lt;li&gt;Overkill for small apps.
&lt;/li&gt;
&lt;li&gt;Frequent re-renders unless using selectors.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Modern Redux (RTK)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Redux Toolkit simplifies boilerplate.
&lt;/li&gt;
&lt;li&gt;Immer for immutable updates.
&lt;/li&gt;
&lt;li&gt;Built-in async thunks.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Redux provides predictable global state with time-travel debugging. Modern RTK removes boilerplate and uses Immer for immutability.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🧵 Zustand, Recoil, Jotai (Modern State Libraries)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Zustand
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Minimal, no boilerplate.
&lt;/li&gt;
&lt;li&gt;Store is just a hook:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useStore&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}))&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Fine-grained reactivity (components subscribe to slices).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Recoil
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Atom-based (pieces of state are independent).
&lt;/li&gt;
&lt;li&gt;Derived values via selectors.
&lt;/li&gt;
&lt;li&gt;Plays well with concurrent rendering.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Jotai
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Primitive atoms (similar to Recoil, simpler).
&lt;/li&gt;
&lt;li&gt;Directly use hooks for atom state.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Modern libraries like Zustand and Recoil fix Context’s perf issues by letting components subscribe to slices of state instead of the whole store.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 🧩 Event-Driven vs Snapshot State
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Snapshot (React default)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You always render the latest snapshot.
&lt;/li&gt;
&lt;li&gt;Changes trigger a re-render.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Event-driven (rare but useful)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Instead of syncing state → broadcast events (pub/sub).
&lt;/li&gt;
&lt;li&gt;Useful for &lt;strong&gt;real-time apps&lt;/strong&gt; (chat, notifications).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React state is snapshot-based. For real-time event-driven scenarios, combine with pub/sub systems to avoid re-render storms.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🗄️ Normalized State
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Represent relational data in flat structures (like a database).  &lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Why
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Avoids deep nested updates.
&lt;/li&gt;
&lt;li&gt;Improves memoization (can compare by ID).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Nested&lt;/span&gt;
&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}]}]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Normalized&lt;/span&gt;
&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;users&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]}},&lt;/span&gt; &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{...}}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Redux Toolkit’s &lt;code&gt;createEntityAdapter&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Normalizr library.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Normalize relational state to flat structures. This avoids deep updates and enables efficient memoization.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🧊 Immutable Updates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
React state must not be mutated directly — immutability ensures predictable diffs.  &lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Spread operator, &lt;code&gt;Object.assign&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;Immer (used by Redux Toolkit).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Mutation&lt;/span&gt;
&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="c1"&gt;// ✅ Immutable update&lt;/span&gt;
&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React relies on immutability to detect changes. Mutating state directly breaks reactivity and can cause stale renders.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Performance &amp;amp; Optimization
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🧭 Understanding Re-Renders
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
A component re-renders when its &lt;strong&gt;state or props change&lt;/strong&gt;, or when its parent re-renders and passes new references.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React compares new vs old VDOM → reconciles differences.&lt;/li&gt;
&lt;li&gt;Even if output is identical, reconciliation still happens.&lt;/li&gt;
&lt;li&gt;Render ≠ always commit (render can be interrupted).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Passing new object/array literals causes re-renders:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MyComp&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;// new object each render&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Context updates re-render all consumers.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;React.memo&lt;/code&gt; prevents re-render only if props shallow-equal.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Re-renders happen on state/prop changes or parent updates. Passing new object references or Context changes are common perf killers.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🪞 React.memo, useMemo, useCallback
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ React.memo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wraps component → shallowly compares props.&lt;/li&gt;
&lt;li&gt;Prevents unnecessary re-renders.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ useMemo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Memoizes &lt;strong&gt;values&lt;/strong&gt; between renders.&lt;/li&gt;
&lt;li&gt;Expensive computations or derived values.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ useCallback
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Memoizes &lt;strong&gt;functions&lt;/strong&gt; → prevents creating new fn refs.&lt;/li&gt;
&lt;li&gt;Useful when passing callbacks to memoized children.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useMemo/useCallback&lt;/code&gt; themselves add cost — only use when necessary.&lt;/li&gt;
&lt;li&gt;Shallow comparison means nested objects still cause false negatives.&lt;/li&gt;
&lt;li&gt;Over-memoization can worsen performance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React.memo avoids re-renders by shallow prop compare. useMemo memoizes values, useCallback memoizes functions. Overusing them can hurt, not help.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🔄 Batching Updates
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React groups multiple state updates into one render.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Before React 18
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Batching happened only inside event handlers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ React 18+
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Batching happens in &lt;strong&gt;all contexts&lt;/strong&gt; (timers, async callbacks, promises).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;setCount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;setValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// React 18 → one render&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React 18 enables automatic batching everywhere, reducing re-renders. Before 18, batching was limited to event handlers.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. ⚡ Concurrent Rendering
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React 18’s &lt;strong&gt;Concurrent Mode&lt;/strong&gt; (enabled by default) allows rendering to be interruptible, paused, or restarted based on priority.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enables &lt;strong&gt;time slicing&lt;/strong&gt; — responsive UI during rendering.&lt;/li&gt;
&lt;li&gt;New APIs: &lt;code&gt;useTransition&lt;/code&gt;, &lt;code&gt;useDeferredValue&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Doesn’t change final UI, just how React schedules updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Render can happen multiple times before commit.&lt;/li&gt;
&lt;li&gt;Side effects must be in commit phase (&lt;code&gt;useEffect&lt;/code&gt;, not render).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Concurrent rendering lets React pause and resume work based on priority. It doesn’t change the UI outcome, only the scheduling.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🕹️ useTransition &amp;amp; useDeferredValue
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ useTransition
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Splits updates into &lt;strong&gt;urgent&lt;/strong&gt; vs &lt;strong&gt;non-urgent&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Keeps UI responsive during heavy re-renders.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;isPending&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;startTransition&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useTransition&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;startTransition&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setSearchResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;expensiveCompute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ useDeferredValue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Defers updating a value until less urgent work is done.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deferredQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useDeferredValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“useTransition marks updates as non-urgent, keeping UI responsive. useDeferredValue delays expensive renders until idle.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 📦 Virtualization (Large Lists)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Render only visible items in a list instead of all at once.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Libraries
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;react-window&lt;/code&gt;, &lt;code&gt;react-virtualized&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Huge perf gains for 10k+ items.&lt;/li&gt;
&lt;li&gt;Reduces DOM nodes drastically.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Needs correct height calculation.&lt;/li&gt;
&lt;li&gt;Accessibility and SEO challenges (hidden elements not available).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Virtualization renders only visible list items. Essential for huge datasets, but requires careful handling of heights and accessibility.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🎭 Suspense for Data Fetching
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Suspense lets components “wait” for async data before rendering fallback UI.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Suspense boundaries prevent waterfalls.&lt;/li&gt;
&lt;li&gt;Used with React 18 data frameworks (Next.js, Relay).&lt;/li&gt;
&lt;li&gt;Works with streaming SSR.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Suspense &lt;strong&gt;only&lt;/strong&gt; handles promises, not arbitrary async.&lt;/li&gt;
&lt;li&gt;Error handling must use Error Boundaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Suspense lets React wait for async data with fallbacks. It simplifies async UI but needs Error Boundaries for failure cases.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🧩 Avoiding Expensive Renders
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Techniques
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windowing/virtualization&lt;/strong&gt; for long lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Throttling/debouncing&lt;/strong&gt; user input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lazy load components&lt;/strong&gt; (&lt;code&gt;React.lazy&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selective Context&lt;/strong&gt; (split providers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selector hooks&lt;/strong&gt; (subscribe to slices of state).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Optimize renders by memoizing, windowing lists, debouncing inputs, lazy loading code, and splitting state into smaller contexts.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  9. 📊 Debugging Performance
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React DevTools Profiler&lt;/strong&gt; (flame graph of renders).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;why-did-you-render&lt;/code&gt; library (detects unnecessary renders).&lt;/li&gt;
&lt;li&gt;Browser Performance tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Common Symptoms
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Re-render storms.&lt;/li&gt;
&lt;li&gt;Input lag.&lt;/li&gt;
&lt;li&gt;Flickering UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use React Profiler and why-did-you-render to spot re-render storms. Input lag or flickering often means wasted renders.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 Advanced Hooks &amp;amp; Patterns
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🛠️ Custom Hooks (Encapsulation &amp;amp; Reuse)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Custom hooks are user-defined functions that &lt;strong&gt;use other hooks&lt;/strong&gt; to encapsulate reusable logic.  &lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Encapsulate side effects, subscriptions, state machines.
&lt;/li&gt;
&lt;li&gt;Return values (state, handlers) just like built-ins.
&lt;/li&gt;
&lt;li&gt;Naming convention: &lt;code&gt;useSomething&lt;/code&gt; ensures linting rules apply.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useOnlineStatus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;online&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setOnline&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onLine&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setOnline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onLine&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;online&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;online&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;removeEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;online&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Custom hooks let you extract reusable stateful logic. They’re just functions that call hooks and return state/handlers.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🧮 Hook Composition vs HOCs vs Render Props
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Higher-Order Components (HOCs)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Function that wraps a component → returns new component.
&lt;/li&gt;
&lt;li&gt;Used for cross-cutting concerns (auth, logging).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Render Props
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Component accepts a function as &lt;code&gt;children&lt;/code&gt; or &lt;code&gt;prop&lt;/code&gt; → renders custom UI.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Hooks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Modern replacement for both — composable, less nesting.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HOCs increase component tree depth (“wrapper hell”).
&lt;/li&gt;
&lt;li&gt;Render props cause “function as child” nesting.
&lt;/li&gt;
&lt;li&gt;Hooks keep tree flat but can cause dependency confusion in &lt;code&gt;useEffect&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hooks replace HOCs and Render Props for reusing logic. They’re flatter and composable, but you must manage dependencies carefully.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. 🧩 Compound Components Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Builds components that work together as a set, sharing state via Context or props.  &lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Tabs&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setActive&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;TabsContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setActive&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;TabsContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;TabList&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Tab&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setActive&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TabsContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setActive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;active&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Great for design systems.
&lt;/li&gt;
&lt;li&gt;Flexible API (consumer composes layout).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Compound components let you build flexible APIs where multiple components share context state, like Tabs, Accordions, or Menus.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. 🧮 Controlled vs Uncontrolled Components (Revisited)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Controlled&lt;/strong&gt; → Parent owns state.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncontrolled&lt;/strong&gt; → DOM owns state (access via ref).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ✅ Pattern
&lt;/h3&gt;

&lt;p&gt;Some advanced components support &lt;strong&gt;both&lt;/strong&gt; via &lt;code&gt;value&lt;/code&gt; + &lt;code&gt;defaultValue&lt;/code&gt;.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Input&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;defaultValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onChange&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;internal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setInternal&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;defaultValue&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isControlled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isControlled&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;internal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;isControlled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;setInternal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;?.(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Controlled components sync state to React, uncontrolled use refs. Advanced components often support both by checking for &lt;code&gt;value&lt;/code&gt; prop.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🔗 Prop Getters Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A function returns props you spread onto elements, letting consumers extend behavior.  &lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useToggle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setOn&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toggle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setOn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;o&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getTogglerProps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aria-pressed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;?.(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nf"&gt;toggle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getTogglerProps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getTogglerProps&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useToggle&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;getTogglerProps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;clicked&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;On&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Off&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Prop Getters let custom hooks merge consumer props with internal behavior — ensuring accessibility and extensibility.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🎛️ Refs &amp;amp; Imperative APIs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ useRef
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Holds mutable values across renders without triggering re-renders.
&lt;/li&gt;
&lt;li&gt;Common for DOM access.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ forwardRef
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lets parent pass refs down to child components.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ useImperativeHandle
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Expose &lt;strong&gt;custom methods&lt;/strong&gt; from a component via ref.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FancyInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;forwardRef&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nf"&gt;useImperativeHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ref&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;FancyInput&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Refs provide imperative escapes. forwardRef passes refs down, useImperativeHandle customizes exposed APIs.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. ⏱️ useEffect vs useLayoutEffect
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ useEffect
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Runs after paint → async, non-blocking.
&lt;/li&gt;
&lt;li&gt;Good for subscriptions, async calls.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ useLayoutEffect
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Runs &lt;strong&gt;synchronously after DOM mutations but before paint&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Good for DOM measurements, sync mutations.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Using useLayoutEffect for heavy work blocks paint → jank.
&lt;/li&gt;
&lt;li&gt;Server-side rendering warns if you use useLayoutEffect (no DOM).
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“useEffect runs async after paint; useLayoutEffect runs sync before paint — use the latter only for DOM measurements.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🛡️ Error Boundaries
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
React components that catch errors in children and render fallback UI.  &lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Class components only (&lt;code&gt;componentDidCatch&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;Catch render, lifecycle, commit errors.
&lt;/li&gt;
&lt;li&gt;Don’t catch async errors (use try/catch in async).
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ErrorBoundary&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;hasError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;getDerivedStateFromError&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;hasError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;componentDidCatch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasError&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Oops&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Error Boundaries catch render/lifecycle errors in children and show fallback UI. They don’t catch async errors or event handlers.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 React Concurrent Features &amp;amp; Architecture
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🧵 Fiber Deep Dive
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Fiber is React’s internal data structure (a linked list of “units of work”) that enables &lt;strong&gt;interruptible, prioritized rendering&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fiber Node&lt;/strong&gt; stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;type (component/function)&lt;/li&gt;
&lt;li&gt;pendingProps, memoizedState&lt;/li&gt;
&lt;li&gt;child, sibling, return pointers (tree shape)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enables React to &lt;strong&gt;pause rendering mid-tree&lt;/strong&gt;, yield to higher-priority work, then resume.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Each Fiber node corresponds to one component instance.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Render can be restarted&lt;/strong&gt; — never rely on render running exactly once.&lt;/li&gt;
&lt;li&gt;Effects must run in &lt;strong&gt;commit phase&lt;/strong&gt;, not render.&lt;/li&gt;
&lt;li&gt;Updates can be &lt;strong&gt;reordered&lt;/strong&gt; for performance (concurrent mode).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Fiber is React’s linked-list tree of work units. It makes rendering interruptible, resumable, and prioritizable.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  2. 🛣️ Lanes &amp;amp; Scheduling (React 18)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React assigns updates to &lt;strong&gt;lanes&lt;/strong&gt; — priority buckets for scheduling work.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Urgent → user input (click, typing).&lt;/li&gt;
&lt;li&gt;Normal → data updates.&lt;/li&gt;
&lt;li&gt;Idle → background rendering.&lt;/li&gt;
&lt;li&gt;React merges lanes when possible to batch updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Updates may &lt;strong&gt;not flush immediately&lt;/strong&gt; — React may wait until a higher-priority update occurs.&lt;/li&gt;
&lt;li&gt;Debugging lag requires understanding scheduling lanes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React uses lanes to schedule updates by priority. User input gets high priority, background renders get low. This keeps apps responsive.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  3. ⏳ Render vs Commit (Revisited)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Render phase&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build Fiber tree, diff with previous.&lt;/li&gt;
&lt;li&gt;Interruptible.&lt;/li&gt;
&lt;li&gt;No DOM mutations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Commit phase&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply DOM changes.&lt;/li&gt;
&lt;li&gt;Run layout effects &amp;amp; lifecycles.&lt;/li&gt;
&lt;li&gt;Non-interruptible.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;StrictMode can trigger &lt;strong&gt;double-invoked renders&lt;/strong&gt; to expose side effects.&lt;/li&gt;
&lt;li&gt;Commit phase runs synchronously — avoid blocking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Render is interruptible and pure, commit is synchronous and mutates the DOM. All side effects belong in commit.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  4. ⏱️ Concurrent Rendering
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Introduced in React 18: rendering is no longer “all or nothing”. React can &lt;strong&gt;pause, resume, restart&lt;/strong&gt; renders.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keeps input responsive during heavy rendering.&lt;/li&gt;
&lt;li&gt;Splits urgent vs non-urgent updates.&lt;/li&gt;
&lt;li&gt;Enables new APIs (&lt;code&gt;useTransition&lt;/code&gt;, &lt;code&gt;useDeferredValue&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Component render functions can run multiple times without committing.&lt;/li&gt;
&lt;li&gt;Must avoid side effects in render (or cause bugs).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Concurrent rendering lets React pause and resume work. This keeps UIs responsive but means renders can restart anytime.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  5. 🕹️ Transition API
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ useTransition
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Marks state updates as non-urgent.&lt;/li&gt;
&lt;li&gt;Keeps urgent work (typing, clicks) responsive.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;isPending&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;startTransition&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useTransition&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;startTransition&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setSearchResults&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;expensiveQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  ✅ useDeferredValue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Defers value updates until React is idle.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;deferredQuery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useDeferredValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“useTransition splits urgent vs non-urgent updates. useDeferredValue delays heavy computations until idle.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  6. 📦 Suspense for Data (React 18+)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Suspense boundaries allow components to &lt;strong&gt;wait for promises&lt;/strong&gt; before rendering fallback UI.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Works with streaming SSR.&lt;/li&gt;
&lt;li&gt;Integrates with frameworks like Next.js (app router).&lt;/li&gt;
&lt;li&gt;Prevents waterfalls by suspending at boundaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Suspense doesn’t handle errors → must use Error Boundaries.&lt;/li&gt;
&lt;li&gt;Data fetching must throw a promise to suspend (React Query, Relay do this).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Spinner&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Suspense lets React pause rendering for async data, showing fallback UI. It simplifies async orchestration in concurrent rendering.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  7. 🌐 Streaming SSR &amp;amp; Suspense
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React 18 added &lt;strong&gt;streaming server rendering&lt;/strong&gt; with Suspense support.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Server sends HTML chunks progressively.&lt;/li&gt;
&lt;li&gt;Suspense boundaries can stream in later.&lt;/li&gt;
&lt;li&gt;Improves TTFB (time to first byte).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Requires careful hydration (client must resume correctly).&lt;/li&gt;
&lt;li&gt;Progressive hydration needed to avoid blocking interactivity.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Streaming SSR sends HTML in chunks with Suspense boundaries, improving TTFB and avoiding full-page blocking.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  8. 🧑‍💻 React Server Components (RSC)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
New model where some components &lt;strong&gt;render on the server only&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;RSCs don’t ship JS to client → smaller bundles.&lt;/li&gt;
&lt;li&gt;Can fetch data directly (no hooks).&lt;/li&gt;
&lt;li&gt;Can stream into client tree.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Server &amp;amp; client components must be carefully separated.&lt;/li&gt;
&lt;li&gt;Not fully mature outside Next.js App Router yet.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React Server Components let some components render only on the server, reducing client JS and enabling data-fetching at the component level.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  9. 🧩 Hydration &amp;amp; Variants
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Hydration = React attaches event listeners to server-rendered HTML.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Variants
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Partial Hydration&lt;/strong&gt; → only hydrate interactive parts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Islands Architecture&lt;/strong&gt; → hydrate independent sections separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selective Hydration (React 18)&lt;/strong&gt; → React hydrates higher-priority parts first.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mismatch between server/client markup → hydration errors.&lt;/li&gt;
&lt;li&gt;Must ensure deterministic render output.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hydration attaches React to server HTML. React 18 does selective hydration, hydrating high-priority parts first.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  10. ⚙️ React Compiler (Meta’s new optimization)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Upcoming optimization that &lt;strong&gt;auto-memoizes components&lt;/strong&gt; by analyzing dependencies.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Removes manual &lt;code&gt;useMemo&lt;/code&gt; / &lt;code&gt;useCallback&lt;/code&gt; needs.&lt;/li&gt;
&lt;li&gt;Still experimental, but already used internally at Meta.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React Compiler automatically memoizes components by analyzing dependencies, reducing the need for manual useMemo/useCallback.”&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🟦 React and the Browser
&lt;/h1&gt;


&lt;h2&gt;
  
  
  1. 🎯 React’s Synthetic Event System
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React wraps native browser events in a &lt;strong&gt;SyntheticEvent&lt;/strong&gt; object for consistency across browsers.&lt;/p&gt;
&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React normalizes event names/behavior.&lt;/li&gt;
&lt;li&gt;Events are &lt;strong&gt;pooled&lt;/strong&gt; for performance (object reused).&lt;/li&gt;
&lt;li&gt;Handlers receive the synthetic event, not the native one.&lt;/li&gt;
&lt;li&gt;If you need the native event → use &lt;code&gt;event.nativeEvent&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Event pooling can cause bugs:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// ❌ e is null (pooled)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;persist&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// prevents pooling&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Since React 17+, event delegation attaches at the root container, not &lt;code&gt;document&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React wraps events in a SyntheticEvent for cross-browser consistency. They’re pooled by default, so use &lt;code&gt;e.persist()&lt;/code&gt; if async access is needed.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🪟 Portals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Portals allow rendering children into a DOM node outside the parent hierarchy.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Use Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Modals, tooltips, dropdowns (avoid z-index hell).&lt;/li&gt;
&lt;li&gt;Fixed-position UI that must escape overflow/position contexts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Events &lt;strong&gt;still bubble through React tree&lt;/strong&gt;, not DOM hierarchy.&lt;/li&gt;
&lt;li&gt;CSS scoping issues: portal content may escape styling context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createPortal&lt;/span&gt;&lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Modal&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;,&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;modal-root&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Portals let you render components outside parent DOM hierarchy but keep React’s event bubbling intact. Ideal for modals &amp;amp; tooltips.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. ⏱️ Concurrent Input Handling
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React 18 uses concurrent rendering to keep &lt;strong&gt;inputs responsive&lt;/strong&gt; during heavy updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Patterns
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useTransition&lt;/code&gt;: defer expensive UI while typing remains smooth.&lt;/li&gt;
&lt;li&gt;Debouncing or throttling input handlers.&lt;/li&gt;
&lt;li&gt;Offload expensive work to Web Workers if needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Without transitions, large lists can lag when filtering.&lt;/li&gt;
&lt;li&gt;Transition fallback (&lt;code&gt;isPending&lt;/code&gt;) must show loading state gracefully.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Concurrent input handling keeps typing responsive during heavy renders using transitions, deferrals, and sometimes workers.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🎨 CSS-in-React Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Options
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CSS Modules&lt;/strong&gt; → Scoped per file, no runtime cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS-in-JS (styled-components, Emotion)&lt;/strong&gt; → Dynamic styling, runtime overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utility-first (Tailwind)&lt;/strong&gt; → Atomic classes, fast builds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vanilla Extract, Linaria&lt;/strong&gt; → Zero-runtime CSS-in-JS.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ✅ Performance Considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CSS-in-JS creates runtime overhead (inserts &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; at runtime).&lt;/li&gt;
&lt;li&gt;Tailwind/atomic CSS minimizes runtime but can bloat HTML.&lt;/li&gt;
&lt;li&gt;CSS Modules = simple &amp;amp; performant default.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“CSS-in-React strategies vary: CSS Modules are simple &amp;amp; fast, CSS-in-JS offers flexibility with runtime cost, Tailwind optimizes for dev speed.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. ♿ Accessibility (a11y)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Ensuring UI works for all users, including assistive technologies.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use semantic HTML (&lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; instead of &lt;code&gt;&amp;lt;div onClick&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;ARIA roles and attributes for assistive tools.&lt;/li&gt;
&lt;li&gt;Keyboard navigation (tab order, focus management).&lt;/li&gt;
&lt;li&gt;Color contrast compliance (WCAG AA/AAA).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;aria-live&lt;/code&gt; regions for async updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Custom components (e.g., &lt;code&gt;&amp;lt;div role="button"&amp;gt;&lt;/code&gt;) require &lt;strong&gt;manual keyboard handlers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Portals can trap focus if modals don’t manage it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;aria-pressed&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Toggle&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Accessible React means using semantic HTML, ARIA attributes, and proper focus management. Accessibility isn’t optional at scale.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. ⚡ Browser APIs in React
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Common Integrations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IntersectionObserver&lt;/strong&gt; → lazy load images, infinite scroll.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ResizeObserver&lt;/strong&gt; → adapt to element size changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MutationObserver&lt;/strong&gt; → detect DOM mutations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;requestIdleCallback&lt;/strong&gt; → schedule background work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Must clean up observers in &lt;code&gt;useEffect&lt;/code&gt; cleanup.&lt;/li&gt;
&lt;li&gt;Observers fire frequently → debounce or throttle updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React integrates with browser observers (Intersection, Resize, Mutation) for performance-sensitive UIs. Always clean up listeners.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🧩 Browser Rendering vs React Rendering
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Browser Rendering
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HTML → DOM → CSSOM → Render Tree → Layout → Paint → Composite.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ React Rendering
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;VDOM diff → Fiber scheduling → Commit → DOM mutation → Browser rendering pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;React may &lt;strong&gt;skip DOM updates&lt;/strong&gt; if VDOM diff sees no changes.&lt;/li&gt;
&lt;li&gt;But every render still costs JS time → optimize unnecessary renders.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Browser rendering = layout/paint. React rendering = VDOM diff → DOM mutation. Both must be optimized separately.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Large-Scale React Application Architecture
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🧱 Component-Driven Development (CDD)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Build applications from &lt;strong&gt;small reusable components&lt;/strong&gt; upward, using a design system.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Atomic Design: Atoms → Molecules → Organisms → Templates → Pages.&lt;/li&gt;
&lt;li&gt;Storybook or Ladle for component isolation.&lt;/li&gt;
&lt;li&gt;Components must be &lt;strong&gt;stateless + composable&lt;/strong&gt; where possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Too much abstraction leads to “prop soup.”&lt;/li&gt;
&lt;li&gt;Teams must align on design tokens (spacing, colors, typography).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“CDD means building from reusable components, often with a design system, to scale consistency across teams.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🎨 Multi-Tenant Theming
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Supporting multiple brands or tenants from the same codebase.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Techniques
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSS Variables:&lt;/strong&gt; Themeable at runtime:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;--primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;var(--primary)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Click&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context Providers:&lt;/strong&gt; Provide theme object via React context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design Tokens:&lt;/strong&gt; Abstract theme into JSON tokens → consumed by CSS-in-JS, CSS vars, or native CSS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Context re-renders on theme switch.&lt;/li&gt;
&lt;li&gt;Dynamic imports for brand assets.&lt;/li&gt;
&lt;li&gt;Multi-tenant SSR must inject correct theme per request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Multi-tenant theming is solved with design tokens + CSS variables, allowing runtime theme switching without rebuilds.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🗂️ Monorepos &amp;amp; Code Sharing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Approaches
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Turborepo / Nx:&lt;/strong&gt; Efficient build &amp;amp; caching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yarn Workspaces / pnpm Workspaces:&lt;/strong&gt; Share deps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component packages:&lt;/strong&gt; Internal NPM libraries for design system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dependency hoisting issues.&lt;/li&gt;
&lt;li&gt;Cross-package version drift.&lt;/li&gt;
&lt;li&gt;Need CI/CD pipelines that handle partial builds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Monorepos with tools like Nx/Turborepo enable shared design systems and libraries, but need caching and dependency management.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🌍 Micro-Frontends (Module Federation)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Splitting large apps into independently deployable React apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Webpack Module Federation: load remote components at runtime.&lt;/li&gt;
&lt;li&gt;Teams deploy independently, reducing coordination.&lt;/li&gt;
&lt;li&gt;Shared dependencies (React, design system) must be singleton.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cross-microfrontend routing.&lt;/li&gt;
&lt;li&gt;State sharing between MFEs is tricky.&lt;/li&gt;
&lt;li&gt;Performance hit if federation is misconfigured (duplicate Reacts!).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Micro-frontends split large React apps into independently deployable modules, often via Module Federation. Great for org scaling, tricky for state &amp;amp; routing.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🛡️ Error Boundaries at Scale
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Patterns
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wrap critical UI chunks (e.g., dashboard widgets).&lt;/li&gt;
&lt;li&gt;Provide &lt;strong&gt;segmented recovery&lt;/strong&gt; → one widget fails, rest continue.&lt;/li&gt;
&lt;li&gt;Show fallback UI with retry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ErrorBoundary&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;RetryButton&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Widget&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;ErrorBoundary&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t wrap the whole app with one boundary — loses isolation.&lt;/li&gt;
&lt;li&gt;Errors in async code aren’t caught.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“At scale, error boundaries must isolate failures per feature, ensuring one broken widget doesn’t take down the entire app.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 📊 Logging, Monitoring, Observability
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Frontend Observability&lt;/strong&gt; includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error tracking (Sentry, Datadog, New Relic).&lt;/li&gt;
&lt;li&gt;Performance metrics (LCP, FID/INP, CLS).&lt;/li&gt;
&lt;li&gt;User interactions (heatmaps, logs).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Centralized logging pipeline → correlate frontend errors with backend logs.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GDPR/PII compliance: don’t log sensitive data.&lt;/li&gt;
&lt;li&gt;Sampling needed at scale (don’t log every keystroke).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Frontend observability at scale means error tracking + performance metrics + logs, tied to backend systems. Logging must respect privacy laws.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🔒 Security in React Apps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Common Threats
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;XSS (Cross-Site Scripting):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid &lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sanitize user input (DOMPurify).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;CSRF (Cross-Site Request Forgery):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use SameSite cookies or CSRF tokens.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Clickjacking:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;X-Frame-Options headers.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Dependency vulnerabilities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regular audits with &lt;code&gt;npm audit&lt;/code&gt;, Snyk.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t trust client-side validation → always validate server-side.&lt;/li&gt;
&lt;li&gt;Don’t roll your own sanitizer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React itself mitigates XSS by escaping content, but security requires sanitizing inputs, protecting cookies, and hardening dependencies.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🏗️ Scalability Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code splitting&lt;/strong&gt; → lazy load per route.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component boundaries&lt;/strong&gt; → minimize prop drilling, use context sparingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selective hydration&lt;/strong&gt; → hydrate only critical UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent architecture&lt;/strong&gt; → enforce with ESLint + TypeScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team-level contracts&lt;/strong&gt; → clear ownership of shared libraries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Scaling React apps requires modular architecture, code splitting, selective hydration, and strong governance over shared libraries.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 React with Data &amp;amp; Networking
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 📡 Data Fetching Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Approaches
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Manual fetch in useEffect&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Simple, but prone to race conditions &amp;amp; missing caching.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Global fetchers (React Query, SWR, Apollo)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cache + deduplication + retries built-in.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Server Components (RSC)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data fetched on the server → no client fetch needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useEffect(fetch)&lt;/code&gt; → risks double-fetch in StrictMode.&lt;/li&gt;
&lt;li&gt;Must abort stale requests (&lt;code&gt;AbortController&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Data fetching &lt;strong&gt;belongs outside render&lt;/strong&gt; → don’t fetch inside components without memoization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Manual fetching works for small apps, but React Query/SWR handle caching, retries, deduplication. RSC moves fetching server-side.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🗃️ Caching Approaches
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Snapshot Cache (React Query, SWR)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Store last response in cache.&lt;/li&gt;
&lt;li&gt;Deduplicate identical queries.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stale-while-revalidate pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show cached data immediately.&lt;/li&gt;
&lt;li&gt;Refresh in background.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Normalized Cache (Apollo, Relay)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cache data by entity ID (like a client-side DB).&lt;/li&gt;
&lt;li&gt;Avoids duplicate entities in memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Normalized caching = more boilerplate.&lt;/li&gt;
&lt;li&gt;Snapshot caching = easier, but duplicates possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Snapshot caches store responses; normalized caches deduplicate entities by ID. Use normalized caching when relational data needs consistency.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🕹️ Suspense for Data Fetching
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React Suspense lets components “pause” until a Promise resolves.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Works with data libraries that throw promises.&lt;/li&gt;
&lt;li&gt;Boundaries prevent waterfall loading.&lt;/li&gt;
&lt;li&gt;Enables streaming SSR.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Must combine with Error Boundaries.&lt;/li&gt;
&lt;li&gt;Not production-ready for all cases yet (needs framework support).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Spinner&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Suspense lets components wait for promises, showing fallbacks instead of loaders everywhere.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🔄 Optimistic UI &amp;amp; Rollbacks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Update the UI immediately on user action, then reconcile with server response.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Increases responsiveness.&lt;/li&gt;
&lt;li&gt;Requires rollback if server rejects update.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example (React Query)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newTodo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;optimisticUpdate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newTodo&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;onError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rollback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;rollback&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Rollbacks must restore consistent state.&lt;/li&gt;
&lt;li&gt;Concurrency issues if multiple mutations overlap.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Optimistic UI updates immediately for responsiveness, but requires rollback on failure. Libraries like React Query automate this.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🌊 Streaming Data (Realtime)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Approaches
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WebSockets:&lt;/strong&gt; Full-duplex, bidirectional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-Sent Events (SSE):&lt;/strong&gt; One-way streaming from server → client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GraphQL Subscriptions:&lt;/strong&gt; Built on WebSockets.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ React Integration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Store messages in state or external store (Zustand).&lt;/li&gt;
&lt;li&gt;Use Suspense for initial load, event-driven updates after.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Must handle reconnects.&lt;/li&gt;
&lt;li&gt;Avoid memory leaks by unsubscribing on unmount.&lt;/li&gt;
&lt;li&gt;Overusing Context for streaming data → re-renders every message.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Real-time data uses WebSockets, SSE, or GraphQL subscriptions. Integrate with React using stores or selectors to avoid re-render storms.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. ⚠️ Handling Race Conditions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Problem
&lt;/h3&gt;

&lt;p&gt;If a user types quickly, multiple fetches may return out of order.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Solutions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AbortController:&lt;/strong&gt; cancel stale requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latest-only strategy:&lt;/strong&gt; track request ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data libraries:&lt;/strong&gt; React Query handles deduplication.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AbortController&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api?q=term&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// cancel previous request&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Prevent race conditions by aborting stale requests (AbortController) or using libraries with deduplication.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🧩 Error Handling in Data
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Patterns
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wrap fetches with Error Boundaries.&lt;/li&gt;
&lt;li&gt;Show segmented error UI (not one giant crash).&lt;/li&gt;
&lt;li&gt;Retry with exponential backoff.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example (React Query)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;todos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fetchTodos&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;retry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;retryDelay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Handle data errors gracefully: retries, error boundaries, and segmented fallback UI.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. ⚡ Data Prefetching &amp;amp; Dehydration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Prefetching
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fetch data before navigation → instant page load.&lt;/li&gt;
&lt;li&gt;Frameworks like Next.js, Remix automate this.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Dehydration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Server fetches data → serializes into HTML → client hydrates cache.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Prefetching and dehydration make data instantly available on navigation by preloading or hydrating caches.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Testing &amp;amp; Quality in React
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🧪 Testing Levels in React
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Unit Tests
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Smallest piece (function, hook, component).&lt;/li&gt;
&lt;li&gt;Isolated from external systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Integration Tests
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multiple components working together.&lt;/li&gt;
&lt;li&gt;Focus on behavior (e.g., form validation).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ E2E (End-to-End) Tests
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Full app in browser (Cypress, Playwright).&lt;/li&gt;
&lt;li&gt;Test real user flows (login, checkout).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Too many unit tests = brittle, low confidence.&lt;/li&gt;
&lt;li&gt;E2E tests = slow, flakier, but higher confidence.&lt;/li&gt;
&lt;li&gt;Best strategy = &lt;strong&gt;Testing Pyramid&lt;/strong&gt; (more unit, fewer E2E).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use a pyramid: many unit tests, fewer integration tests, and critical E2E flows. Don’t over-invest in one level.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 📚 React Testing Library (RTL)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
The de-facto standard for testing React components.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Encourages &lt;strong&gt;testing behavior, not implementation&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Query DOM with &lt;strong&gt;role, text, label&lt;/strong&gt; instead of class names.&lt;/li&gt;
&lt;li&gt;Built on top of DOM Testing Library.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Click&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;);&lt;/span&gt;
&lt;span class="nx"&gt;fireEvent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;screen&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getByRole&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;toBeEnabled&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Avoid testing internal states (&lt;code&gt;wrapper.state()&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Prefer &lt;code&gt;userEvent&lt;/code&gt; over &lt;code&gt;fireEvent&lt;/code&gt; for realistic interactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“RTL tests React by user behavior, not internals — query by role/label, simulate real events with userEvent.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🧑‍🔬 Snapshot Testing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Tests that render component → compare output to saved snapshot.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fast way to catch unexpected UI changes.&lt;/li&gt;
&lt;li&gt;Great for static, predictable components (icons, design tokens).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Overused snapshots → noisy diffs, brittle tests.&lt;/li&gt;
&lt;li&gt;Not a substitute for behavior tests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Snapshots are useful for static UI checks, but overusing them leads to brittle tests. Prefer behavioral assertions.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🔌 Mocking APIs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Common Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;jest.mock&lt;/strong&gt; for modules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fetch mocks&lt;/strong&gt; with &lt;code&gt;jest-fetch-mock&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mock Service Worker (MSW):&lt;/strong&gt; intercepts fetch/XHR → simulates API at network layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ MSW Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;res&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t mock too low-level → tests become unrealistic.&lt;/li&gt;
&lt;li&gt;MSW &amp;gt; manual mocks because it simulates the network layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Mock APIs at the network layer with MSW for realistic tests. Avoid low-level mocks that make tests lie.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🎭 E2E Testing (Cypress / Playwright)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simulate full browser environment.&lt;/li&gt;
&lt;li&gt;Test critical flows: login, checkout, dashboard.&lt;/li&gt;
&lt;li&gt;Integrates with CI pipelines.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Differences
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cypress:&lt;/strong&gt; simple API, auto-wait, great ecosystem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playwright:&lt;/strong&gt; faster, better cross-browser &amp;amp; parallel support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Flaky tests from network delays → fix with retries or MSW.&lt;/li&gt;
&lt;li&gt;Keep E2E tests &lt;strong&gt;minimal but critical&lt;/strong&gt; (happy path + critical edge cases).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use E2E tests for mission-critical flows. Cypress is popular, Playwright is faster and cross-browser. Keep them lean.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 📊 Performance Testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React Profiler API&lt;/strong&gt; → measure render times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighthouse&lt;/strong&gt; → web vitals (LCP, FID/INP, CLS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebPageTest&lt;/strong&gt; for network analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Strategies
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Write automated perf budgets → fail CI if LCP/CLS regress.&lt;/li&gt;
&lt;li&gt;Use flame graphs in Profiler to find re-render storms.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Performance tests track user-centric metrics (LCP, INP, CLS). Use React Profiler + Lighthouse, and enforce budgets in CI.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🧩 Testing Hooks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;@testing-library/react-hooks&lt;/strong&gt; (deprecated, now in &lt;code&gt;@testing-library/react&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setC&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;renderHook&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;useCounter&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nf"&gt;act&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Always wrap state updates in &lt;code&gt;act()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Don’t over-test hooks — test their consumer components instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hooks can be tested directly with renderHook, but prefer testing components that consume them for realistic behavior.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🛡️ Best Practices for React Testing
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Test &lt;strong&gt;user behavior, not implementation&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Minimize mocks → prefer integration-level tests.&lt;/li&gt;
&lt;li&gt;Keep snapshots small and targeted.&lt;/li&gt;
&lt;li&gt;Use MSW for realistic API mocking.&lt;/li&gt;
&lt;li&gt;Focus E2E tests on &lt;strong&gt;critical flows only&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Measure performance with budgets in CI.&lt;/li&gt;
&lt;li&gt;Maintain test pyramids → don’t drown in E2E tests.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🟦 React Ecosystem &amp;amp; Future
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🌐 Next.js Internals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Next.js is the most popular React meta-framework, adding SSR, routing, and data-fetching.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Rendering Modes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSG (Static Site Generation):&lt;/strong&gt; Pre-render at build time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSR (Server-Side Rendering):&lt;/strong&gt; Render per request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ISR (Incremental Static Regeneration):&lt;/strong&gt; Re-generate stale pages on demand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming SSR (React 18):&lt;/strong&gt; Progressive HTML streaming.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Routing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pages router (legacy).&lt;/li&gt;
&lt;li&gt;App router (React 18 Suspense + Server Components).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mixing SSG + client hydration can cause mismatch errors.&lt;/li&gt;
&lt;li&gt;ISR requires cache invalidation strategy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Next.js supports SSG, SSR, ISR, and streaming SSR. Its App Router integrates React Server Components for hybrid server+client rendering.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🎭 Remix
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
A full-stack React framework focused on web fundamentals.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loaders &amp;amp; Actions:&lt;/strong&gt; Server APIs for data &amp;amp; mutations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nested Routing:&lt;/strong&gt; Data &amp;amp; layout are scoped per route.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive Enhancement:&lt;/strong&gt; Works even without JS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tighter coupling to HTTP (good or bad depending on team).&lt;/li&gt;
&lt;li&gt;Smaller ecosystem compared to Next.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Remix embraces the web platform: loaders/actions for data, nested routes for composition, and progressive enhancement by default.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🧩 React Server Components (RSC)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
React components that render &lt;strong&gt;only on the server&lt;/strong&gt;, never shipping JS to the client.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Smaller client bundles.&lt;/li&gt;
&lt;li&gt;Fetch data directly (no hooks needed).&lt;/li&gt;
&lt;li&gt;Seamless integration with client components.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Not yet widely supported outside Next.js App Router.&lt;/li&gt;
&lt;li&gt;Requires strict separation between server &amp;amp; client components.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React Server Components render only on the server, reducing client JS. They fetch data directly and stream into client trees.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. ⚡ React Compiler (Future)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Meta’s upcoming optimization tool that &lt;strong&gt;auto-memoizes components&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Removes manual need for &lt;code&gt;useMemo&lt;/code&gt;/&lt;code&gt;useCallback&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Already in production at Meta (as of 2024–25).&lt;/li&gt;
&lt;li&gt;Analyzes dependency usage at build-time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React Compiler auto-memoizes components, eliminating most manual useMemo/useCallback. It’s already in use at Meta.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 📱 React Native
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Same React API, renders to native views (iOS/Android).&lt;/li&gt;
&lt;li&gt;Uses a &lt;strong&gt;bridge&lt;/strong&gt; (JS ↔ native).&lt;/li&gt;
&lt;li&gt;New architecture: &lt;strong&gt;JSI + Fabric renderer + TurboModules&lt;/strong&gt; → faster, less overhead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Not true “write once, run anywhere” → platform-specific tuning still needed.&lt;/li&gt;
&lt;li&gt;Performance depends on new architecture adoption.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React Native shares React’s model but renders native components. Its new architecture (Fabric/JSI) reduces bridge overhead.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🧪 Alternative Frameworks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Preact
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lightweight React alternative (~3KB).&lt;/li&gt;
&lt;li&gt;Same API, drop-in for React (with aliasing).&lt;/li&gt;
&lt;li&gt;Used in performance-critical apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Solid.js
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fine-grained reactivity (signals instead of VDOM).&lt;/li&gt;
&lt;li&gt;Much faster for many scenarios.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Qwik
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resumability&lt;/strong&gt;: ships zero JS initially, resumes state on demand.&lt;/li&gt;
&lt;li&gt;Solves hydration overhead in huge apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Alternatives like Preact (lightweight React), Solid (fine-grained reactivity), and Qwik (resumable apps) push forward new performance models.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🔄 Migration Strategies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Class → Hooks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Incrementally refactor components.&lt;/li&gt;
&lt;li&gt;Wrap legacy lifecycles in custom hooks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Legacy React → Modern (Concurrent + Suspense)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;StrictMode&lt;/code&gt; to surface unsafe lifecycles.&lt;/li&gt;
&lt;li&gt;Refactor &lt;code&gt;componentWillMount&lt;/code&gt;/&lt;code&gt;componentWillReceiveProps&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Replace legacy Context API with new API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Monolith → Micro-Frontends
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Strangle pattern: carve out routes/modules.&lt;/li&gt;
&lt;li&gt;Share design system first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Migrations must be incremental: class → hooks, legacy → concurrent features, monolith → micro-frontends via strangle pattern.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🔮 Future of React
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Trends
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React Server Components&lt;/strong&gt; → data + rendering shift server-side.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming SSR&lt;/strong&gt; → better TTFB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Compiler&lt;/strong&gt; → auto-memoization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signals&lt;/strong&gt; (inspired by Solid.js) → may influence React state model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrent UI as default&lt;/strong&gt; → more user-perceived responsiveness.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“React’s future focuses on server components, streaming SSR, auto-memoization via React Compiler, and adopting ideas from signals-based reactivity.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ✅ Summary (Full Handbook)
&lt;/h1&gt;

&lt;p&gt;This React handbook covers staff/architect-level depth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Core Fundamentals (VDOM, reconciliation, Fiber, phases, lifecycle, hooks rules, context, controlled/uncontrolled inputs)&lt;/li&gt;
&lt;li&gt;State Management (useState vs useReducer, local vs global, Context, Redux/RTK, Zustand/Recoil/Jotai, snapshot vs event-driven, normalization, immutability)&lt;/li&gt;
&lt;li&gt;Performance &amp;amp; Optimization (re-renders, memoization, batching, concurrent rendering, transitions, virtualization, Suspense, profiling)&lt;/li&gt;
&lt;li&gt;Advanced Hooks &amp;amp; Patterns (custom hooks, HOCs vs render props, compound components, controlled/uncontrolled, prop getters, refs &amp;amp; imperative APIs, useEffect vs useLayoutEffect, error boundaries)&lt;/li&gt;
&lt;li&gt;Concurrent Features &amp;amp; Architecture (Fiber, lanes, render vs commit, concurrent rendering, transitions, Suspense, streaming SSR, RSC, hydration, React Compiler)&lt;/li&gt;
&lt;li&gt;React and the Browser (synthetic events, portals, concurrent input handling, CSS strategies, accessibility, browser observers, rendering pipeline)&lt;/li&gt;
&lt;li&gt;Large-Scale Architecture (CDD, theming, monorepos, micro-frontends, error boundaries, observability, security, scalability best practices)&lt;/li&gt;
&lt;li&gt;React with Data (fetching, caching, Suspense, optimistic UI, streaming, race conditions, error handling, prefetching &amp;amp; dehydration)&lt;/li&gt;
&lt;li&gt;Testing &amp;amp; Quality (pyramid, RTL, snapshots, MSW, Cypress/Playwright, performance testing, hooks testing, best practices)&lt;/li&gt;
&lt;li&gt;Ecosystem &amp;amp; Future (Next.js, Remix, RSC, Compiler, React Native, alternatives like Preact/Solid/Qwik, migration strategies, future trends)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>Core JavaScript Expert Revision Handbook</title>
      <dc:creator>Animesh Pandey</dc:creator>
      <pubDate>Sun, 31 Aug 2025 18:50:43 +0000</pubDate>
      <link>https://forem.com/anmshpndy/core-javascript-expert-level-revision-42a2</link>
      <guid>https://forem.com/anmshpndy/core-javascript-expert-level-revision-42a2</guid>
      <description>&lt;h2&gt;
  
  
  📑 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Closures, Scope, Hoisting, &lt;code&gt;this&lt;/code&gt;, Prototypes, Event Loop&lt;/li&gt;
&lt;li&gt;Asynchronous JavaScript&lt;/li&gt;
&lt;li&gt;Advanced Objects &amp;amp; Memory&lt;/li&gt;
&lt;li&gt;Advanced Functions &amp;amp; ES6+ Features&lt;/li&gt;
&lt;li&gt;Browser &amp;amp; DOM Fundamentals&lt;/li&gt;
&lt;li&gt;Performance &amp;amp; Optimization&lt;/li&gt;
&lt;li&gt;Advanced Types &amp;amp; Equality&lt;/li&gt;
&lt;li&gt;Error Handling &amp;amp; Debugging&lt;/li&gt;
&lt;li&gt;Concurrency &amp;amp; Parallelism&lt;/li&gt;
&lt;li&gt;ESNext &amp;amp; Modern Features&lt;/li&gt;
&lt;li&gt;Patterns &amp;amp; Architecture in JavaScript&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🟦 Part 1
&lt;/h1&gt;

&lt;p&gt;This section covers &lt;strong&gt;Closures, Scope &amp;amp; Hoisting, &lt;code&gt;this&lt;/code&gt;, Prototypes, and the Event Loop&lt;/strong&gt; — the foundation of almost every frontend interview.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. 🔒 Closures
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
A closure is a function that retains access to its &lt;strong&gt;lexical environment&lt;/strong&gt; (scope chain) even after the outer function has finished executing.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript uses &lt;strong&gt;lexical scoping&lt;/strong&gt;, not dynamic scoping.&lt;/li&gt;
&lt;li&gt;Closures are formed naturally whenever a function is defined inside another.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;data privacy, currying, memoization, event handlers&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loop with &lt;code&gt;var&lt;/code&gt;:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// 3, 3, 3 (same var captured)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fix with &lt;code&gt;let&lt;/code&gt; (block-scoped) or IIFE.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory leaks:&lt;/strong&gt;&lt;br&gt;
Closures capturing large objects (like DOM nodes) can prevent garbage collection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging pain:&lt;/strong&gt;&lt;br&gt;
DevTools may show “unexpected” retained variables due to closures.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Real-world Bug
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;registerHandlers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Clicked:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// All handlers print last index!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“A closure is a function with its lexical scope bundled in. It enables encapsulation and callbacks but can cause bugs with loops (&lt;code&gt;var&lt;/code&gt;) and memory leaks if you capture more than needed.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 📦 Scope &amp;amp; Hoisting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Scope defines where variables are accessible. &lt;strong&gt;Hoisting&lt;/strong&gt; means declarations are moved to the top of their scope during compilation.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; → &lt;strong&gt;function-scoped&lt;/strong&gt;, hoisted &amp;amp; initialized as &lt;code&gt;undefined&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt;/&lt;code&gt;const&lt;/code&gt; → &lt;strong&gt;block-scoped&lt;/strong&gt;, hoisted but uninitialized (&lt;strong&gt;Temporal Dead Zone, TDZ&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Function declarations → fully hoisted with body.&lt;/li&gt;
&lt;li&gt;Function expressions → behave like variables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TDZ Example:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Function in block scope:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Works differently in strict vs sloppy mode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shadowing:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 2 (outer x hidden)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔄 Quick Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;th&gt;Hoisting&lt;/th&gt;
&lt;th&gt;Default Init&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;let&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;TDZ (error)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;const&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;TDZ (error)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;Yes (with body)&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Declarations are hoisted. &lt;code&gt;var&lt;/code&gt; hoists with &lt;code&gt;undefined&lt;/code&gt;; &lt;code&gt;let&lt;/code&gt;/&lt;code&gt;const&lt;/code&gt; hoist into the TDZ; functions hoist with their body. That’s why accessing a &lt;code&gt;let&lt;/code&gt; before declaration throws, while &lt;code&gt;var&lt;/code&gt; gives undefined.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🧭 The &lt;code&gt;this&lt;/code&gt; Keyword
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;this&lt;/code&gt; is determined by the &lt;strong&gt;call site&lt;/strong&gt;, not the definition.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Rules of &lt;code&gt;this&lt;/code&gt; Binding (Precedence)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;new binding&lt;/strong&gt; → &lt;code&gt;new Foo()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;explicit binding&lt;/strong&gt; → &lt;code&gt;call&lt;/code&gt;, &lt;code&gt;apply&lt;/code&gt;, &lt;code&gt;bind&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;implicit binding&lt;/strong&gt; → &lt;code&gt;obj.method()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;default binding&lt;/strong&gt; → global (window) or &lt;code&gt;undefined&lt;/code&gt; (strict mode)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Losing context:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined (lost `this`)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arrow functions:&lt;/strong&gt; capture lexical &lt;code&gt;this&lt;/code&gt;, cannot be rebound.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;bind + call combo:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bound&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;bound&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// still 1 (bind wins)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔄 Quick Table
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Call Type&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;this&lt;/code&gt; Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Global fn (non-strict)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;window&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global fn (strict)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Method call &lt;code&gt;obj.fn()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;obj&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;new Fn()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;New instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bound fn&lt;/td&gt;
&lt;td&gt;Bound object&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arrow fn&lt;/td&gt;
&lt;td&gt;Lexical scope&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;this&lt;/code&gt; is set at call time, not definition. Precedence is: &lt;code&gt;new&lt;/code&gt; &amp;gt; explicit (&lt;code&gt;bind&lt;/code&gt;) &amp;gt; implicit (object call) &amp;gt; default (global/undefined). Arrow functions inherit &lt;code&gt;this&lt;/code&gt; lexically.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🧩 Prototypes &amp;amp; Inheritance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Objects inherit properties via the &lt;strong&gt;prototype chain&lt;/strong&gt; (&lt;code&gt;[[Prototype]]&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Object.create(proto)&lt;/code&gt; → creates object with &lt;code&gt;proto&lt;/code&gt; as prototype.&lt;/li&gt;
&lt;li&gt;Functions have a &lt;code&gt;.prototype&lt;/code&gt; used when called with &lt;code&gt;new&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Property lookup climbs prototype chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Modifying &lt;code&gt;.prototype&lt;/code&gt; after instances exist → they won’t see changes.&lt;/li&gt;
&lt;li&gt;Shadowing: own property hides prototype property.&lt;/li&gt;
&lt;li&gt;Deep prototype chains slow lookups.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;speak&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; makes noise&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;dog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// "Rex makes noise"&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;__proto__&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Objects inherit via prototypes. If a property isn’t found, JS looks up the chain. Constructors set their &lt;code&gt;.prototype&lt;/code&gt; as the prototype of new instances.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. ⏳ Event Loop &amp;amp; Concurrency
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
The event loop coordinates execution: it runs the &lt;strong&gt;call stack&lt;/strong&gt;, then processes the &lt;strong&gt;task queues&lt;/strong&gt; (macrotasks and microtasks).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Macrotasks:&lt;/strong&gt; setTimeout, setInterval, I/O.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microtasks:&lt;/strong&gt; Promises, MutationObserver, queueMicrotask.&lt;/li&gt;
&lt;li&gt;After each macrotask, the loop drains &lt;strong&gt;all microtasks&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;setTimeout(fn, 0)&lt;/code&gt; is &lt;strong&gt;not immediate&lt;/strong&gt; — runs after microtasks.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Promise.then&lt;/code&gt; always executes before timeouts.&lt;/li&gt;
&lt;li&gt;In Node.js, &lt;code&gt;process.nextTick&lt;/code&gt; runs before microtasks.&lt;/li&gt;
&lt;li&gt;Nested promises keep chaining microtasks → possible starvation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;D&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Output: A, D, C, B&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔄 Execution Order
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Run &lt;strong&gt;call stack&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Drain &lt;strong&gt;microtask queue&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Run next &lt;strong&gt;macrotask&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Repeat&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The event loop runs stack → microtasks → macrotasks. That’s why &lt;code&gt;Promise.then&lt;/code&gt; callbacks run before &lt;code&gt;setTimeout(fn, 0)&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Asynchronous JavaScript
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. ⏱️ Timers (&lt;code&gt;setTimeout&lt;/code&gt;, &lt;code&gt;setInterval&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;setTimeout(fn, delay)&lt;/code&gt; schedules a function once after delay; &lt;code&gt;setInterval(fn, delay)&lt;/code&gt; repeats at intervals.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Actual delay is &lt;strong&gt;minimum&lt;/strong&gt; — not guaranteed exact.&lt;/li&gt;
&lt;li&gt;Nested timers can be throttled by browsers (clamp to ≥4ms after many calls, 1000ms when tab inactive).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;clearTimeout&lt;/code&gt; / &lt;code&gt;clearInterval&lt;/code&gt; cancel scheduled tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;setTimeout(fn, 0)&lt;/code&gt; runs &lt;strong&gt;after all microtasks&lt;/strong&gt; (not immediate).&lt;/li&gt;
&lt;li&gt;Long-running tasks block timers (since JS is single-threaded).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setInterval&lt;/code&gt; can drift → better to use recursive &lt;code&gt;setTimeout&lt;/code&gt; for accuracy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;timeout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;promise&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Output: promise, timeout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Timers schedule macrotasks. &lt;code&gt;setTimeout(fn, 0)&lt;/code&gt; isn’t immediate — it runs after microtasks. For precise intervals, recursive &lt;code&gt;setTimeout&lt;/code&gt; is safer than &lt;code&gt;setInterval&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🔗 Promises
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
A Promise is an object representing the eventual result of an async operation.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;States: &lt;strong&gt;pending → fulfilled&lt;/strong&gt; (resolved) / &lt;strong&gt;rejected&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.then&lt;/code&gt; and &lt;code&gt;.catch&lt;/code&gt; return new promises → enable chaining.&lt;/li&gt;
&lt;li&gt;Handlers are always async (enqueued as &lt;strong&gt;microtasks&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unhandled rejection:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;err&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Without .catch → unhandled rejection warning&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.then&lt;/code&gt; handlers always async:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;then&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sync&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// sync, then&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Multiple &lt;code&gt;.then&lt;/code&gt; on the same promise all execute independently.&lt;/li&gt;
&lt;li&gt;Returning a promise inside &lt;code&gt;.then&lt;/code&gt; flattens it (automatic chaining).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Promises represent async results. &lt;code&gt;.then&lt;/code&gt; handlers are always microtasks, so they run before timers. Returning a promise in &lt;code&gt;.then&lt;/code&gt; flattens the chain.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. ⚡ &lt;code&gt;async&lt;/code&gt; / &lt;code&gt;await&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Syntactic sugar over promises. &lt;code&gt;async&lt;/code&gt; functions return promises; &lt;code&gt;await&lt;/code&gt; pauses until promise settles.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;await&lt;/code&gt; only works inside &lt;code&gt;async&lt;/code&gt; functions (or top-level in modules).&lt;/li&gt;
&lt;li&gt;Execution is split → code after &lt;code&gt;await&lt;/code&gt; runs in a &lt;strong&gt;microtask&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Parallelize with &lt;code&gt;Promise.all&lt;/code&gt; to avoid serial awaits.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;await&lt;/code&gt; inside loops → serial execution (slow).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// slow&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt; &lt;span class="c1"&gt;// fast&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;try/catch&lt;/code&gt; is needed — &lt;code&gt;await&lt;/code&gt; throws on rejection.&lt;/li&gt;
&lt;li&gt;Mixing &lt;code&gt;await&lt;/code&gt; with non-promises just wraps in &lt;code&gt;Promise.resolve&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;C&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Output: A, C, B&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;async/await&lt;/code&gt; is syntax sugar over promises. &lt;code&gt;await&lt;/code&gt; pauses execution and resumes in a microtask. Using it inside loops serializes calls — use &lt;code&gt;Promise.all&lt;/code&gt; for parallelism.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🎛️ Generators &amp;amp; Async Generators
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Generators (&lt;code&gt;function*&lt;/code&gt;) are functions that can pause and resume using &lt;code&gt;yield&lt;/code&gt;. Async generators use &lt;code&gt;for await...of&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generators return an &lt;strong&gt;iterator&lt;/strong&gt; with &lt;code&gt;.next()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Useful for building custom async workflows (before promises).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;co&lt;/code&gt; library + generators → pre-&lt;code&gt;async/await&lt;/code&gt; async management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generators don’t manage async by themselves; must yield promises and have a runner.&lt;/li&gt;
&lt;li&gt;Async generators (&lt;code&gt;async function*&lt;/code&gt;) combine promises with iteration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;gen&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// { value: 1, done: false }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Generators pause with &lt;code&gt;yield&lt;/code&gt; and resume later. They’re useful for async flow control, but in modern JS, &lt;code&gt;async/await&lt;/code&gt; replaces most generator use cases.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. ⏳ Debounce &amp;amp; Throttle
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Patterns for rate-limiting function execution.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debounce:&lt;/strong&gt; wait until no calls happen for X ms. (Good for search input).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Throttle:&lt;/strong&gt; allow one call per X ms. (Good for scroll/resize).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;clearTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;timer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;timer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;throttle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;last&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Debounce delays execution until events stop; throttle limits execution to once per interval. Debounce is for inputs, throttle for continuous events like scroll.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🎨 requestAnimationFrame (rAF)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;requestAnimationFrame(callback)&lt;/code&gt; schedules a callback before the next repaint (~16.6ms at 60fps).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;More efficient than &lt;code&gt;setTimeout&lt;/code&gt; for animations.&lt;/li&gt;
&lt;li&gt;Pauses when tab is inactive (better for performance).&lt;/li&gt;
&lt;li&gt;Ideal for smooth visual updates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Doesn’t guarantee 60fps — depends on device refresh rate.&lt;/li&gt;
&lt;li&gt;Can be canceled with &lt;code&gt;cancelAnimationFrame(id)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// draw frame&lt;/span&gt;
  &lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;requestAnimationFrame&lt;/code&gt; runs a callback before the next repaint. It’s optimized for animations and pauses in inactive tabs.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🧵 Web Workers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Web Workers run JS in background threads, off the main event loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Communicate via &lt;code&gt;postMessage&lt;/code&gt; (structured clone).&lt;/li&gt;
&lt;li&gt;No DOM access inside workers.&lt;/li&gt;
&lt;li&gt;Good for CPU-heavy tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Serialization overhead in &lt;code&gt;postMessage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;SharedArrayBuffer needed for true shared memory.&lt;/li&gt;
&lt;li&gt;Not supported in all contexts (e.g., some cross-origin iframes).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// worker.js&lt;/span&gt;
&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// main.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;worker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;worker.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Result:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Result: 20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Web Workers move heavy computation off the main thread. They communicate via messages, but can’t access the DOM.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Advanced Objects &amp;amp; Memory
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🧹 Garbage Collection (GC)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
JavaScript uses &lt;strong&gt;automatic garbage collection&lt;/strong&gt; — freeing memory for objects that are no longer reachable.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reachability&lt;/strong&gt; = if an object can be accessed via a reference chain from a root (e.g. &lt;code&gt;window&lt;/code&gt; or stack).&lt;/li&gt;
&lt;li&gt;Common GC strategy: &lt;strong&gt;Mark &amp;amp; Sweep&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Circular references are fine if unreachable from root.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Accidental leaks:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Global variables (&lt;code&gt;window.leak = obj&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Closures holding large structures.&lt;/li&gt;
&lt;li&gt;Detached DOM nodes retained in memory.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Timers / event listeners:&lt;/strong&gt; If not cleared, they keep references alive.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onclick&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;clicked&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// If `el` removed from DOM but reference stays in closure → leak&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“GC frees unreachable memory. Leaks usually happen via globals, closures, or dangling DOM references, not because of circular references.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🗝️ Symbols
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Symbol()&lt;/code&gt; creates a &lt;strong&gt;unique primitive identifier&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Never equal to another symbol, even with same description.&lt;/li&gt;
&lt;li&gt;Used for &lt;strong&gt;non-colliding property keys&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Symbol.for(key)&lt;/code&gt; reuses a global registry symbol.&lt;/li&gt;
&lt;li&gt;Built-in symbols customize behavior (&lt;code&gt;Symbol.iterator&lt;/code&gt;, &lt;code&gt;Symbol.toStringTag&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;for...in&lt;/code&gt; and &lt;code&gt;Object.keys&lt;/code&gt; ignore symbols. Must use &lt;code&gt;Object.getOwnPropertySymbols&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;JSON.stringify ignores symbols.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// []&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getOwnPropertySymbols&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// [Symbol(id)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Symbols are unique identifiers, often used as hidden object keys or to customize built-in behaviors. They’re ignored by JSON and normal enumeration.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🗄️ WeakMap &amp;amp; WeakSet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Weak collections hold &lt;strong&gt;weak references&lt;/strong&gt; to objects — allowing GC when there are no other references.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WeakMap:&lt;/strong&gt; keys must be objects, values arbitrary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WeakSet:&lt;/strong&gt; stores objects, prevents duplicates.&lt;/li&gt;
&lt;li&gt;Entries are &lt;strong&gt;not enumerable&lt;/strong&gt; (no &lt;code&gt;size&lt;/code&gt;, no iteration).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can’t inspect contents → intentionally opaque.&lt;/li&gt;
&lt;li&gt;Useful for &lt;strong&gt;private data&lt;/strong&gt; or &lt;strong&gt;DOM element caching&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;wm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WeakMap&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nx"&gt;wm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;secret&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;wm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "secret"&lt;/span&gt;
&lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// entry auto-removed when GC runs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“WeakMap/WeakSet hold weak references — objects can be GC’d even if they’re keys. They’re ideal for caching and private data without leaks.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 📝 Property Descriptors
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Every property has a descriptor object with attributes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;value&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;enumerable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;configurable&lt;/code&gt;
(or &lt;code&gt;get&lt;/code&gt;/&lt;code&gt;set&lt;/code&gt; for accessors).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Object.defineProperty&lt;/code&gt; controls property behavior.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;enumerable&lt;/code&gt; controls visibility in loops.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;configurable&lt;/code&gt; prevents deletion or redefinition.&lt;/li&gt;
&lt;li&gt;Non-writable prevents assignment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Default attributes: &lt;code&gt;false&lt;/code&gt; if defined via &lt;code&gt;defineProperty&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Freezing (&lt;code&gt;Object.freeze&lt;/code&gt;) sets all &lt;code&gt;writable=false, configurable=false&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defineProperty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;writable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;enumerable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;configurable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ignored in strict mode → TypeError&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Property descriptors let you control attributes like writable, enumerable, configurable. They’re the foundation of &lt;code&gt;Object.freeze&lt;/code&gt; and getters/setters.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🕵️ Proxy &amp;amp; Reflect
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Proxy&lt;/code&gt; allows you to intercept operations on objects. &lt;code&gt;Reflect&lt;/code&gt; provides low-level methods that mirror default behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Handlers (traps): &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;set&lt;/code&gt;, &lt;code&gt;has&lt;/code&gt;, &lt;code&gt;deleteProperty&lt;/code&gt;, &lt;code&gt;apply&lt;/code&gt;, &lt;code&gt;construct&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Reflect&lt;/code&gt; ensures correct forwarding (avoids reinventing default behavior).&lt;/li&gt;
&lt;li&gt;Used for logging, validation, virtualization, reactive systems (Vue3 uses Proxy).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Proxies can slow performance if overused.&lt;/li&gt;
&lt;li&gt;Can break identity expectations (&lt;code&gt;obj === proxy&lt;/code&gt; is false).&lt;/li&gt;
&lt;li&gt;Some operations (like private fields) are not trap-able.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;proxy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Proxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;get&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;proxy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// logs: get a → 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Proxies wrap objects with traps for operations like get/set. &lt;code&gt;Reflect&lt;/code&gt; provides the default behavior to forward calls. Proxies power modern reactivity systems.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🧊 Immutability Tricks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
JavaScript objects are mutable by default. Immutability ensures predictable state (important in React/Redux).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Object.freeze&lt;/code&gt; → prevents modifications.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Object.seal&lt;/code&gt; → prevents adding/removing props, but can update values.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Object.preventExtensions&lt;/code&gt; → prevents new props, but allows edits/deletes.&lt;/li&gt;
&lt;li&gt;Deep immutability requires recursion or libraries (&lt;code&gt;immer&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Freeze is &lt;strong&gt;shallow&lt;/strong&gt; — nested objects still mutable.&lt;/li&gt;
&lt;li&gt;Frozen objects are still extensible by changing prototype unless explicitly blocked.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;freeze&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ignored&lt;/span&gt;
&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// allowed (nested not frozen)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Objects are mutable by default. &lt;code&gt;freeze&lt;/code&gt;/&lt;code&gt;seal&lt;/code&gt;/&lt;code&gt;preventExtensions&lt;/code&gt; restrict changes, but only shallowly. For deep immutability, you need recursion or libraries like Immer.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Advanced Functions &amp;amp; ES6+ Features
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🏗️ Higher-Order Functions (HOFs)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Functions that either &lt;strong&gt;take functions as arguments&lt;/strong&gt; or &lt;strong&gt;return functions&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Foundation of functional programming.&lt;/li&gt;
&lt;li&gt;Enable: &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt;, &lt;code&gt;reduce&lt;/code&gt;, decorators, middleware.&lt;/li&gt;
&lt;li&gt;Encourage immutability + composition.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Passing non-functions → runtime errors.&lt;/li&gt;
&lt;li&gt;Excessive nesting → callback hell (before Promises/async).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;withLogging&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Calling with&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loggedSum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;withLogging&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;loggedSum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// logs args → 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“A higher-order function either takes functions as arguments or returns them. They enable abstractions like map, filter, and middleware.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🎨 Currying &amp;amp; Partial Application
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Currying:&lt;/strong&gt; Transforming a function &lt;code&gt;f(a, b, c)&lt;/code&gt; into &lt;code&gt;f(a)(b)(c)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partial application:&lt;/strong&gt; Pre-filling some arguments, returning a new function.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Used in FP libraries like Lodash, Ramda.&lt;/li&gt;
&lt;li&gt;Helps reusability and function composition.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Over-currying → unreadable code.&lt;/li&gt;
&lt;li&gt;Currying ≠ partial application (though related).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;currySum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;currySum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 6&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;partial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;add5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;partial&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;add5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Currying breaks a function into unary steps (&lt;code&gt;f(a)(b)(c)&lt;/code&gt;), while partial application pre-fills arguments. Both improve reusability.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 📦 Modules (ESM vs CommonJS)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Modules encapsulate code into reusable files.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CommonJS (CJS):&lt;/strong&gt; Node.js legacy (&lt;code&gt;require&lt;/code&gt;, &lt;code&gt;module.exports&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ES Modules (ESM):&lt;/strong&gt; Modern JS (&lt;code&gt;import&lt;/code&gt;, &lt;code&gt;export&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;ESM is &lt;strong&gt;statically analyzable&lt;/strong&gt; → enables tree-shaking.&lt;/li&gt;
&lt;li&gt;Default exports vs named exports.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mixing CJS and ESM leads to quirks (&lt;code&gt;default&lt;/code&gt; interop).&lt;/li&gt;
&lt;li&gt;ESM is always strict mode.&lt;/li&gt;
&lt;li&gt;Imports are hoisted (run before any other code).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// utils.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;subtract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// main.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;subtract&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./utils.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“CommonJS uses require, ES Modules use import/export. ESM is statically analyzable and supports tree-shaking, which is why modern bundlers prefer it.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. ✨ Destructuring &amp;amp; Spread/Rest
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Syntax for unpacking values into variables.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Array destructuring:&lt;/strong&gt; &lt;code&gt;[a, b] = arr&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Object destructuring:&lt;/strong&gt; &lt;code&gt;{ x, y } = obj&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rest:&lt;/strong&gt; gather leftovers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spread:&lt;/strong&gt; expand arrays/objects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Nested destructuring → &lt;code&gt;undefined&lt;/code&gt; if property missing.&lt;/li&gt;
&lt;li&gt;Default values only apply when property is &lt;code&gt;undefined&lt;/code&gt;, not &lt;code&gt;null&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 1, 5&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 20&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newArr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// [1,2,3]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Destructuring unpacks arrays/objects, rest gathers leftovers, spread expands. Defaults only trigger on &lt;code&gt;undefined&lt;/code&gt;, not &lt;code&gt;null&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🧾 Default, Rest, and Named Parameters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default params:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rest params:&lt;/strong&gt; collects extra args → array.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Named params:&lt;/strong&gt; simulated with object destructuring.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Default params are evaluated at call time.&lt;/li&gt;
&lt;li&gt;Rest params differ from &lt;code&gt;arguments&lt;/code&gt; (rest is real array, &lt;code&gt;arguments&lt;/code&gt; is array-like).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Default params evaluate at call time, rest params gather extras as a real array, and named params are simulated via object destructuring.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🔄 Iterators &amp;amp; Iterables
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
An &lt;strong&gt;iterator&lt;/strong&gt; is an object with &lt;code&gt;.next()&lt;/code&gt;. An &lt;strong&gt;iterable&lt;/strong&gt; has &lt;code&gt;[Symbol.iterator]&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Iterables: arrays, strings, maps, sets.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;for...of&lt;/code&gt; loops over iterables (not plain objects).&lt;/li&gt;
&lt;li&gt;Custom iterables by implementing &lt;code&gt;[Symbol.iterator]&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Plain objects aren’t iterable unless you define &lt;code&gt;[Symbol.iterator]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Spread &lt;code&gt;...obj&lt;/code&gt; works only if iterable defined.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;iterable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;Symbol&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iterator&lt;/span&gt;&lt;span class="p"&gt;]()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;iterable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Iterables implement &lt;code&gt;[Symbol.iterator]&lt;/code&gt;, which returns an iterator with &lt;code&gt;.next()&lt;/code&gt;. That’s why arrays, maps, and sets work with &lt;code&gt;for...of&lt;/code&gt; and spread.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 📚 Map, Set, WeakMap, WeakSet
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Specialized collection types introduced in ES6.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Map:&lt;/strong&gt; key-value pairs, keys can be any type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set:&lt;/strong&gt; unique values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WeakMap/WeakSet:&lt;/strong&gt; only object keys, weak references (non-enumerable).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NaN&lt;/code&gt; is considered equal to itself in Set.&lt;/li&gt;
&lt;li&gt;Map preserves insertion order.&lt;/li&gt;
&lt;li&gt;WeakMap doesn’t prevent GC.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;set&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 3&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;({},&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Map and Set are collections with insertion order preserved. WeakMap/WeakSet hold weak object references, useful for caching without memory leaks.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🧭 ES6+ Extras (that interviewers test)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔑 Template Literals
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔑 Tagged Templates
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;strings&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tag&lt;/span&gt;&lt;span class="s2"&gt;`Hi &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; and &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bob&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Hi ALEXandBOB"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔑 Optional Chaining &amp;amp; Nullish Coalescing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;prop&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;nested&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// avoids TypeError&lt;/span&gt;
&lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;default&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// only default if null/undefined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Modern JS adds quality-of-life features like template literals, optional chaining (&lt;code&gt;?.&lt;/code&gt;), and nullish coalescing (&lt;code&gt;??&lt;/code&gt;). These avoid common boilerplate and bugs.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Browser &amp;amp; DOM Fundamentals
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🎯 Event Delegation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Attaching a &lt;strong&gt;single event listener on a parent&lt;/strong&gt; to handle events for multiple child elements via &lt;strong&gt;event bubbling&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;event propagation&lt;/strong&gt; (capture → target → bubble).&lt;/li&gt;
&lt;li&gt;Reduces memory usage (no per-child listeners).&lt;/li&gt;
&lt;li&gt;Works well for dynamic DOM (children added later).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;event.target&lt;/code&gt; vs &lt;code&gt;event.currentTarget&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;target&lt;/code&gt; = actual clicked element.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;currentTarget&lt;/code&gt; = element with listener.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Some events &lt;strong&gt;don’t bubble&lt;/strong&gt; (e.g., &lt;code&gt;blur&lt;/code&gt;, &lt;code&gt;focus&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;list&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tagName&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Clicked item:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Event delegation attaches a single listener on a parent and relies on bubbling. It’s efficient for many/dynamic child elements.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🖼️ Reflow vs Repaint (Performance)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reflow (layout):&lt;/strong&gt; Browser recalculates element positions &amp;amp; sizes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repaint:&lt;/strong&gt; Browser redraws pixels (e.g., color change).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reflow is more expensive than repaint.&lt;/li&gt;
&lt;li&gt;Causes of reflow: DOM changes, style changes, window resize, font load.&lt;/li&gt;
&lt;li&gt;Batch DOM reads/writes to avoid multiple reflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Accessing layout properties (&lt;code&gt;offsetHeight&lt;/code&gt;, &lt;code&gt;scrollTop&lt;/code&gt;) forces reflow.&lt;/li&gt;
&lt;li&gt;Animating &lt;code&gt;top/left&lt;/code&gt; triggers layout; animating &lt;code&gt;transform/opacity&lt;/code&gt; is GPU-optimized.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;box&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;200px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;          &lt;span class="c1"&gt;// triggers reflow&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;offsetHeight&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// forces reflow again (expensive)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Reflow recalculates layout, repaint redraws pixels. Reflow is costly — optimize by batching DOM changes and animating transform/opacity.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🌳 DOM Traversal &amp;amp; Manipulation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Methods
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;getElementById&lt;/code&gt;, &lt;code&gt;querySelector&lt;/code&gt;, &lt;code&gt;querySelectorAll&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;parentNode&lt;/code&gt;, &lt;code&gt;children&lt;/code&gt;, &lt;code&gt;nextSibling&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Creating: &lt;code&gt;document.createElement&lt;/code&gt;, &lt;code&gt;appendChild&lt;/code&gt;, &lt;code&gt;insertBefore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Performance: Use &lt;strong&gt;DocumentFragment&lt;/strong&gt; for batch insertions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;innerHTML&lt;/code&gt; is faster for large inserts but unsafe (XSS risk).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;NodeList&lt;/code&gt; vs &lt;code&gt;HTMLCollection&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NodeList&lt;/code&gt; can be static or live.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HTMLCollection&lt;/code&gt; is always live.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“DOM traversal uses APIs like querySelector, parentNode, and siblings. For performance, batch inserts with DocumentFragment instead of repeated appendChild.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 💾 Storage APIs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cookies:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4KB limit.&lt;/li&gt;
&lt;li&gt;Sent with every HTTP request.&lt;/li&gt;
&lt;li&gt;Expiration &amp;amp; domain/path scoped.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;localStorage:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5–10MB.&lt;/li&gt;
&lt;li&gt;Synchronous API.&lt;/li&gt;
&lt;li&gt;Persistent until cleared.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;sessionStorage:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-tab/session.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;IndexedDB:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Async, NoSQL DB in browser.&lt;/li&gt;
&lt;li&gt;Large storage, structured queries.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;localStorage is &lt;strong&gt;blocking&lt;/strong&gt; → avoid heavy writes in main thread.&lt;/li&gt;
&lt;li&gt;Cookies hurt performance since they’re sent on every request.&lt;/li&gt;
&lt;li&gt;IndexedDB APIs are clunky (usually use wrapper libraries).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Cookies are for server comms (small, auto-sent), localStorage/sessionStorage for small client-only data, and IndexedDB for large structured storage.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🔒 Browser Security (CORS, CSRF, XSS)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ CORS (Cross-Origin Resource Sharing)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Controls cross-domain requests.&lt;/li&gt;
&lt;li&gt;Server sets &lt;code&gt;Access-Control-Allow-Origin&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ CSRF (Cross-Site Request Forgery)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Malicious site tricks user’s browser into sending authenticated request.&lt;/li&gt;
&lt;li&gt;Prevented with &lt;strong&gt;CSRF tokens&lt;/strong&gt; or &lt;strong&gt;SameSite cookies&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ XSS (Cross-Site Scripting)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Injected scripts executed in victim’s browser.&lt;/li&gt;
&lt;li&gt;Prevented with &lt;strong&gt;escaping, CSP (Content Security Policy)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“CORS controls which origins can access resources, CSRF tricks users into sending unwanted requests, and XSS injects malicious scripts. Fix with headers, tokens, and sanitization.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. ⚡ Service Workers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Background scripts that intercept network requests → enable &lt;strong&gt;offline caching, push notifications, background sync&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Cache API&lt;/strong&gt; for offline storage.&lt;/li&gt;
&lt;li&gt;Run in their own thread (no DOM access).&lt;/li&gt;
&lt;li&gt;Lifecycle: install → activate → fetch.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Require HTTPS.&lt;/li&gt;
&lt;li&gt;Debugging can be tricky (stale workers → need manual refresh).&lt;/li&gt;
&lt;li&gt;Misuse can cause cache-bloat or stale responses.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fetch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;respondWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;caches&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Service workers are background scripts that enable offline caching and network interception. They power PWAs but must be carefully managed to avoid stale caches.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🌐 Critical Rendering Path (CRP)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Steps the browser takes to convert HTML/CSS/JS into pixels.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Stages
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Parse HTML → DOM&lt;/li&gt;
&lt;li&gt;Parse CSS → CSSOM&lt;/li&gt;
&lt;li&gt;Combine → Render Tree&lt;/li&gt;
&lt;li&gt;Layout (Reflow)&lt;/li&gt;
&lt;li&gt;Paint (Repaint)&lt;/li&gt;
&lt;li&gt;Composite layers&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Render-blocking:&lt;/strong&gt; CSS blocks rendering, JS blocks parsing unless &lt;code&gt;defer/async&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fonts:&lt;/strong&gt; FOUT/FOIT issues (Flash of Unstyled/Invisible Text).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The CRP is DOM + CSSOM → render tree → layout → paint → composite. Optimize by deferring scripts, minimizing CSS, and preloading fonts.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🧩 Resource Loading (&lt;code&gt;async&lt;/code&gt; vs &lt;code&gt;defer&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Attributes that control how scripts load.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;async&lt;/code&gt;: downloads in parallel, executes ASAP (order not guaranteed).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;defer&lt;/code&gt;: downloads in parallel, executes &lt;strong&gt;after HTML parse&lt;/strong&gt;, preserves order.&lt;/li&gt;
&lt;li&gt;Default: blocking (bad for performance).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use &lt;code&gt;defer&lt;/code&gt; for scripts that rely on DOM, &lt;code&gt;async&lt;/code&gt; for independent scripts. Default blocking scripts delay parsing and hurt performance.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Core JavaScript — Expert-Level Revision
&lt;/h1&gt;

&lt;h1&gt;
  
  
  🟦 Performance &amp;amp; Optimization
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🧹 Memory Leaks in Frontend
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
A memory leak happens when memory is not released after it’s no longer needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Common Sources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Uncleared timers/intervals&lt;/strong&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// never cleared&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detached DOM nodes&lt;/strong&gt; kept in closures or global arrays.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event listeners&lt;/strong&gt; not removed on unmount.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global variables&lt;/strong&gt; and singletons that grow unbounded.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Frontend leaks often come from forgotten event listeners, timers, or DOM nodes retained in closures. Use cleanup (&lt;code&gt;clearInterval&lt;/code&gt;, &lt;code&gt;removeEventListener&lt;/code&gt;) and profiling tools.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 💤 Lazy Loading &amp;amp; Code Splitting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Splitting bundles into smaller chunks and loading them on demand.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reduces initial load time.&lt;/li&gt;
&lt;li&gt;Implemented with &lt;strong&gt;dynamic imports&lt;/strong&gt; (&lt;code&gt;import()&lt;/code&gt;), route-based splitting.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;React.lazy&lt;/code&gt; + &lt;code&gt;Suspense&lt;/code&gt; for components.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Too many small chunks → overhead.&lt;/li&gt;
&lt;li&gt;Network latency can hurt if misconfigured.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Lazy loading reduces initial load by splitting code into chunks. Use &lt;code&gt;import()&lt;/code&gt; or &lt;code&gt;React.lazy&lt;/code&gt;. Balance chunk size to avoid too many round-trips.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🌳 Tree-Shaking
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Removing unused code during bundling.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Works only with &lt;strong&gt;ESM (import/export)&lt;/strong&gt; because it’s statically analyzable.&lt;/li&gt;
&lt;li&gt;Dead code elimination depends on bundler + minifier (Webpack, Rollup, Terser).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic &lt;code&gt;require()&lt;/code&gt; prevents tree-shaking.&lt;/li&gt;
&lt;li&gt;Side-effects in modules can block elimination.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Tree-shaking eliminates unused exports but only works with static ES modules. Avoid dynamic imports and side-effects in libraries.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. ⚡ Web Vitals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Google’s metrics for user-perceived performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Core Metrics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LCP (Largest Contentful Paint):&lt;/strong&gt; load speed (&amp;lt;2.5s).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FID (First Input Delay):&lt;/strong&gt; input responsiveness (&amp;lt;100ms).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLS (Cumulative Layout Shift):&lt;/strong&gt; visual stability (&amp;lt;0.1).&lt;/li&gt;
&lt;li&gt;(New) &lt;strong&gt;INP (Interaction to Next Paint)&lt;/strong&gt; replacing FID.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Web Vitals measure perceived performance: LCP for load, FID/INP for input, CLS for stability. Optimize via lazy loading, preloading, and reducing JS.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🧾 Async Scheduling (Idle Time)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Scheduling work when the browser is idle.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;requestIdleCallback(cb)&lt;/code&gt; → runs when browser is idle.&lt;/li&gt;
&lt;li&gt;Useful for non-critical background work.&lt;/li&gt;
&lt;li&gt;Fallback to timers for unsupported browsers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Not guaranteed to run (if browser never idle).&lt;/li&gt;
&lt;li&gt;Time budget limited (~50ms).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;requestIdleCallback&lt;/code&gt; lets you run background work without blocking the main thread, but it may not fire on busy pages.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🎯 Preload, Prefetch, DNS Prefetch
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preload:&lt;/strong&gt; critical resources needed soon.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefetch:&lt;/strong&gt; resources likely needed in future navigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS-prefetch:&lt;/strong&gt; resolve domain names early.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"preload"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;as=&lt;/span&gt;&lt;span class="s"&gt;"image"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"prefetch"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/next-page.js"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"dns-prefetch"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"//cdn.example.com"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Preload fetches critical resources now, prefetch loads likely future ones, DNS-prefetch resolves domains early.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 📦 Bundling Strategies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monolithic bundle&lt;/strong&gt; → fast for small apps, bad for scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code-splitting&lt;/strong&gt; → route-level chunks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Micro-frontends&lt;/strong&gt; → separate bundles per domain (federation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN caching&lt;/strong&gt; → cache chunks by content hash.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Bundle strategy depends on scale. Use route-based code splitting, cache chunks with hashes, and avoid giant monolithic bundles.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🏎️ Rendering Performance Tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Minimize &lt;strong&gt;reflows&lt;/strong&gt; (batch DOM changes).&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;transform/opacity&lt;/strong&gt; for animations.&lt;/li&gt;
&lt;li&gt;Virtualize large lists (e.g., &lt;code&gt;react-window&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Debounce resize/scroll listeners.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Reflows are expensive — batch DOM updates, use transform/opacity for animations, and virtualize long lists.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Core JavaScript — Expert-Level Revision
&lt;/h1&gt;

&lt;h1&gt;
  
  
  🟦 Advanced Types &amp;amp; Equality
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 📌 Truthy &amp;amp; Falsy Values
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
When converted to a boolean (e.g., in &lt;code&gt;if&lt;/code&gt; conditions), some values are considered &lt;strong&gt;truthy&lt;/strong&gt; or &lt;strong&gt;falsy&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Falsy Values (only 7!)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;false&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;0&lt;/code&gt;, &lt;code&gt;-0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;""&lt;/code&gt; (empty string)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NaN&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else → &lt;strong&gt;truthy&lt;/strong&gt; (including &lt;code&gt;"0"&lt;/code&gt;, &lt;code&gt;[]&lt;/code&gt;, &lt;code&gt;{}&lt;/code&gt;, &lt;code&gt;Infinity&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;runs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// runs (string "0" is truthy)&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;([])&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;runs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// runs (empty array is truthy)&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;runs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// runs (empty object is truthy)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Only 7 values are falsy: false, 0, -0, "", null, undefined, NaN. Everything else is truthy — even empty arrays/objects.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🔄 &lt;code&gt;==&lt;/code&gt; vs &lt;code&gt;===&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;===&lt;/code&gt; (strict equality): no type coercion.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;==&lt;/code&gt; (loose equality): allows coercion.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Rules (selected weird ones)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;        &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;       &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;       &lt;span class="c1"&gt;// true ( [] → "" → 0 )&lt;/span&gt;
&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;         &lt;span class="c1"&gt;// true ( [] == false )&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;          &lt;span class="c1"&gt;// true ([1].toString() → "1")&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1,2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;    &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NaN == NaN&lt;/code&gt; → false (NaN is never equal to itself).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;null&lt;/code&gt; only equals &lt;code&gt;undefined&lt;/code&gt; (and itself).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;0 == []&lt;/code&gt; is true, but &lt;code&gt;0 == {}&lt;/code&gt; is false.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;===&lt;/code&gt; checks value + type, no coercion. &lt;code&gt;==&lt;/code&gt; coerces and has weird rules: &lt;code&gt;null == undefined&lt;/code&gt; only, arrays convert to strings, and NaN never equals itself.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🧾 Special Numbers: &lt;code&gt;NaN&lt;/code&gt;, &lt;code&gt;Infinity&lt;/code&gt;, &lt;code&gt;-0&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ NaN
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Not equal to itself: &lt;code&gt;NaN === NaN&lt;/code&gt; → false.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Number.isNaN()&lt;/code&gt; (better than &lt;code&gt;isNaN&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;isNaN("foo")&lt;/code&gt; → true (coerces to NaN).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Infinity
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1 / 0&lt;/code&gt; → &lt;code&gt;Infinity&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-1 / 0&lt;/code&gt; → &lt;code&gt;-Infinity&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ -0
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JS has &lt;strong&gt;two zeros&lt;/strong&gt;: &lt;code&gt;0&lt;/code&gt; and &lt;code&gt;-0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;0 === -0&lt;/code&gt; → true.&lt;/li&gt;
&lt;li&gt;But &lt;code&gt;1 / 0 === Infinity&lt;/code&gt;, &lt;code&gt;1 / -0 === -Infinity&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“JS has two zeros: +0 and -0. They compare equal with &lt;code&gt;===&lt;/code&gt;, but divide by them to get ±Infinity. NaN is never equal to itself.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🗝️ &lt;code&gt;Object.is&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Like &lt;code&gt;===&lt;/code&gt; but fixes edge cases:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Rules
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;NaN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;NaN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is&lt;/span&gt;&lt;span class="p"&gt;({},&lt;/span&gt; &lt;span class="p"&gt;{});&lt;/span&gt;     &lt;span class="c1"&gt;// false (different refs)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;Object.is&lt;/code&gt; is like strict equality but distinguishes -0 and +0, and treats NaN as equal to itself.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 📦 Primitive vs Object Wrappers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Primitives (&lt;code&gt;string&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;boolean&lt;/code&gt;, &lt;code&gt;symbol&lt;/code&gt;, &lt;code&gt;bigint&lt;/code&gt;, &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;undefined&lt;/code&gt;) have &lt;strong&gt;object wrappers&lt;/strong&gt; for method access.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Examples
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;   &lt;span class="c1"&gt;// works because JS boxes into String object&lt;/span&gt;
&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// object wrapper&lt;/span&gt;
&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;          &lt;span class="c1"&gt;// "string"&lt;/span&gt;
&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "object"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;new Boolean(false)&lt;/code&gt; is truthy (object is always truthy).&lt;/li&gt;
&lt;li&gt;Comparing primitive vs object:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// true (coerces)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Primitives auto-box into wrappers (e.g., 'hi'.toUpperCase()). But wrapper objects (&lt;code&gt;new String&lt;/code&gt;) are truthy and behave differently — avoid them.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🧩 Typeof, instanceof, and &lt;code&gt;Array.isArray&lt;/code&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ typeof
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;typeof null&lt;/code&gt; → &lt;code&gt;"object"&lt;/code&gt; (bug since JS 1.0).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;typeof NaN&lt;/code&gt; → &lt;code&gt;"number"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;typeof function() {}&lt;/code&gt; → &lt;code&gt;"function"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ instanceof
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Checks prototype chain.&lt;/li&gt;
&lt;li&gt;Works across inheritance.&lt;/li&gt;
&lt;li&gt;Fails across iframes (different globals).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Array.isArray
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Safest way to check arrays (cross-realm safe).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;           &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;          &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;             &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                   &lt;span class="c1"&gt;// "object"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;typeof null&lt;/code&gt; is 'object' (legacy bug). &lt;code&gt;instanceof&lt;/code&gt; checks prototype chains but breaks across realms. Use &lt;code&gt;Array.isArray&lt;/code&gt; to check arrays safely.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🧮 Type Conversion (Explicit vs Implicit)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Explicit
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Number("42")&lt;/code&gt; → 42&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;String(123)&lt;/code&gt; → "123"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Boolean(0)&lt;/code&gt; → false&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Implicit (coercion)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;1 + "2"&lt;/code&gt; → "12" (string concatenation).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;1 - "2"&lt;/code&gt; → -1 (string → number).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[] + []&lt;/code&gt; → "" (empty string).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[] + {}&lt;/code&gt; → "[object Object]".&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;{} + []&lt;/code&gt; → 0 (parsed as block + array).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="c1"&gt;// [] -&amp;gt; "" -&amp;gt; 0, ![] -&amp;gt; false -&amp;gt; 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Type coercion is implicit conversion. Addition prefers strings, subtraction prefers numbers. Weird cases like [] + {} = '[object Object]' are from toString/valueOf conversions.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Core JavaScript — Expert-Level Revision
&lt;/h1&gt;

&lt;h1&gt;
  
  
  🟦 Error Handling &amp;amp; Debugging
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. ⚠️ &lt;code&gt;try&lt;/code&gt; / &lt;code&gt;catch&lt;/code&gt; / &lt;code&gt;finally&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Mechanism for handling runtime exceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;catch&lt;/code&gt; handles synchronous errors in the &lt;code&gt;try&lt;/code&gt; block.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;finally&lt;/code&gt; always executes (even if return/throw in try/catch).&lt;/li&gt;
&lt;li&gt;Errors bubble up if unhandled.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;boom&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;handled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;finally&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// overrides catch return&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;finally&lt;/code&gt; always runs and overrides return values. Errors bubble up unless caught.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🕸️ Error Types in JavaScript
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Built-in Error Objects
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Error&lt;/code&gt; → base class.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SyntaxError&lt;/code&gt; → invalid syntax (only at parse time).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ReferenceError&lt;/code&gt; → accessing undeclared variable.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;TypeError&lt;/code&gt; → invalid operation (e.g., calling non-function).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RangeError&lt;/code&gt; → out-of-range numbers (e.g., invalid array length).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;URIError&lt;/code&gt; → malformed URI in &lt;code&gt;encodeURI/decodeURI&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EvalError&lt;/code&gt; → legacy, rarely used.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{ invalid }&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nx"&gt;SyntaxError&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“JS has typed errors: Syntax, Reference, Type, Range, URI. Most common in practice: TypeError and ReferenceError.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🛠️ Custom Errors
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Extend the &lt;code&gt;Error&lt;/code&gt; class for domain-specific errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ValidationError&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ValidationError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Custom errors extend Error and set a name for better debugging.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. ⚡ Async Error Handling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Promises
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bad-url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Caught:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.catch()&lt;/code&gt; handles errors in promise chain.&lt;/li&gt;
&lt;li&gt;Uncaught rejections trigger &lt;code&gt;unhandledrejection&lt;/code&gt; event.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ async/await
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bad-url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Caught:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Must wrap &lt;code&gt;await&lt;/code&gt; in &lt;code&gt;try/catch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Rejections not caught will bubble like exceptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Promise errors bubble until caught. In async/await, use try/catch around awaits. Unhandled rejections trigger a global event.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🌍 Global Error Handling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Browser
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onerror&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;col&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Global error:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onunhandledrejection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unhandled rejection:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Node.js
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uncaughtException&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;unhandledRejection&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Don’t rely on global handlers as the &lt;em&gt;only&lt;/em&gt; mechanism — they’re last resort.&lt;/li&gt;
&lt;li&gt;Use for logging/alerting in production.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Global error handlers (&lt;code&gt;window.onerror&lt;/code&gt;, &lt;code&gt;onunhandledrejection&lt;/code&gt;) are safety nets — good for logging, but not a replacement for local handling.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🧭 Debugging Techniques
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;console.*&lt;/code&gt; (log, warn, error, table, dir).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;debugger&lt;/code&gt; keyword (pauses execution in DevTools).&lt;/li&gt;
&lt;li&gt;Source maps (map minified code to original).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Advanced
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Performance profiling (DevTools Performance tab).&lt;/li&gt;
&lt;li&gt;Memory profiling (heap snapshots, allocation timelines).&lt;/li&gt;
&lt;li&gt;Break on DOM mutation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Use console, debugger, and source maps for debugging. For perf/memory, use DevTools profiling and heap snapshots.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 📋 Best Practices for Error Handling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fail fast, fail safe&lt;/strong&gt; → throw early, recover gracefully.&lt;/li&gt;
&lt;li&gt;Don’t swallow errors (&lt;code&gt;catch(e){}&lt;/code&gt; with empty body).&lt;/li&gt;
&lt;li&gt;Normalize errors (consistent structure across app).&lt;/li&gt;
&lt;li&gt;Log with context (user action, environment).&lt;/li&gt;
&lt;li&gt;Avoid throwing strings, always &lt;code&gt;throw new Error(...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Separate &lt;strong&gt;expected errors&lt;/strong&gt; (validation) from &lt;strong&gt;unexpected ones&lt;/strong&gt; (bugs).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Best practice: never swallow errors, always throw Error objects, separate expected from unexpected, and log with context.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Core JavaScript — Expert-Level Revision
&lt;/h1&gt;

&lt;h1&gt;
  
  
  🟦 Concurrency &amp;amp; Parallelism
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🧵 Single-Threaded Model
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
JavaScript executes on a &lt;strong&gt;single thread&lt;/strong&gt; (the call stack) with concurrency simulated via the &lt;strong&gt;event loop&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JS can’t run two functions truly in parallel on the main thread.&lt;/li&gt;
&lt;li&gt;Concurrency = overlapping tasks (via async callbacks).&lt;/li&gt;
&lt;li&gt;Parallelism = tasks literally executing at the same time (needs threads/workers).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Long-running tasks block UI → “frozen page”.&lt;/li&gt;
&lt;li&gt;Async doesn’t mean parallel (Promises still run on one thread).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“JavaScript is single-threaded; concurrency comes from the event loop, but real parallelism requires workers.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. ⏳ Concurrency via Event Loop
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
The event loop interleaves tasks from macrotask &amp;amp; microtask queues.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Concurrency = cooperative multitasking.&lt;/li&gt;
&lt;li&gt;No two JS functions run at the same instant on the same thread.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;timer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;promise&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Output: promise, timer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Concurrency in JS is managed by the event loop — tasks interleave but don’t run truly in parallel.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. ⚡ Parallelism via Web Workers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Web Workers run JS in &lt;strong&gt;background threads&lt;/strong&gt; separate from the main UI thread.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Communicate via &lt;code&gt;postMessage&lt;/code&gt; (structured cloning).&lt;/li&gt;
&lt;li&gt;No direct DOM access.&lt;/li&gt;
&lt;li&gt;Useful for CPU-heavy tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Serialization overhead for large messages.&lt;/li&gt;
&lt;li&gt;No shared state by default (copy-on-message).&lt;/li&gt;
&lt;li&gt;Debugging workers is harder than main thread code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// worker.js&lt;/span&gt;
&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// main.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Worker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;worker.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;postMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Web Workers provide real parallelism by running JS in separate threads, but can’t touch the DOM and communicate only via messages.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🧩 SharedArrayBuffer &amp;amp; Atomics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
APIs for &lt;strong&gt;shared memory&lt;/strong&gt; and low-level synchronization between workers.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SharedArrayBuffer&lt;/code&gt;: allows multiple threads to view/edit same memory.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Atomics&lt;/code&gt;: provides atomic operations (safe increments, waits, notifications).&lt;/li&gt;
&lt;li&gt;Enables building locks, semaphores, and concurrent data structures in JS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Very advanced — rarely used directly, but underpins WebAssembly multithreading.&lt;/li&gt;
&lt;li&gt;Security concerns → disabled after Spectre/Meltdown, re-enabled with stricter cross-origin isolation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SharedArrayBuffer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Int32Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;Atomics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Atomics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“SharedArrayBuffer + Atomics let workers share memory and coordinate safely. It’s how JS supports real multithreading in WebAssembly.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🧮 Parallelism in Node.js
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Node is single-threaded per process, but offers parallelism.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Worker Threads&lt;/strong&gt; (since Node 10.5) → parallel JS execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Child Processes&lt;/strong&gt; → true OS-level processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Module&lt;/strong&gt; → multiple processes sharing load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;libuv threadpool&lt;/strong&gt; → parallelize I/O and certain CPU tasks (crypto, fs).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Node achieves parallelism with worker threads, child processes, or libuv’s threadpool — though the main JS thread is single.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🏎️ Practical Uses of Parallelism
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Image processing&lt;/strong&gt; in background via workers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large JSON parsing&lt;/strong&gt; → offload to worker to avoid UI freeze.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrent fetch requests&lt;/strong&gt; → concurrency (not parallelism).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebAssembly with threads&lt;/strong&gt; → real CPU parallelism.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🟦 Core JavaScript — Expert-Level Revision
&lt;/h1&gt;

&lt;h1&gt;
  
  
  🟦 ESNext &amp;amp; Modern Features
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 🔢 BigInt
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
A primitive type for arbitrarily large integers.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Append &lt;code&gt;n&lt;/code&gt; → &lt;code&gt;123n&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Can’t mix with normal &lt;code&gt;Number&lt;/code&gt; without explicit conversion.&lt;/li&gt;
&lt;li&gt;No precision loss for huge numbers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// TypeError (can’t mix BigInt and Number)&lt;/span&gt;
&lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“BigInt represents integers beyond Number’s 2^53-1 limit. You can’t mix it with Number — must explicitly convert.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 🧩 Optional Chaining (&lt;code&gt;?.&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Safe property access without throwing if intermediate is null/undefined.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Short-circuits if value is null/undefined.&lt;/li&gt;
&lt;li&gt;Works with properties, function calls, array indexes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined, not error&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getName&lt;/span&gt;&lt;span class="p"&gt;?.());&lt;/span&gt;    &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Optional chaining avoids errors by short-circuiting on null/undefined. It works for props, calls, and arrays.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 🟰 Nullish Coalescing (&lt;code&gt;??&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Provides a fallback only for &lt;code&gt;null&lt;/code&gt;/&lt;code&gt;undefined&lt;/code&gt;, not falsy values.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// 42&lt;/span&gt;
&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// 0&lt;/span&gt;

&lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// "x"&lt;/span&gt;
&lt;span class="dl"&gt;""&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;code&gt;??&lt;/code&gt; differs from &lt;code&gt;||&lt;/code&gt; by treating only null/undefined as missing. Falsy values like 0 and '' are kept.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🔄 Top-Level &lt;code&gt;await&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Allows &lt;code&gt;await&lt;/code&gt; at the top level of ES modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Only allowed in ES modules (&lt;code&gt;type="module"&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Blocks module evaluation until awaited promise resolves.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// top-level-await.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Top-level await lets you use await outside functions in ES modules, pausing module execution until resolved.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. ♻️ WeakRefs &amp;amp; FinalizationRegistry
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
APIs to reference objects without preventing GC.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ WeakRef
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;new WeakRef(obj)&lt;/code&gt; → creates weak reference.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.deref()&lt;/code&gt; returns object if still alive, else undefined.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ FinalizationRegistry
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lets you run cleanup after object GC (non-deterministic).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚠️ Gotchas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unreliable for program logic&lt;/strong&gt; — GC is unpredictable.&lt;/li&gt;
&lt;li&gt;Intended for caches, not control flow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weak&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WeakRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// eligible for GC&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;weak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;deref&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// maybe object, maybe undefined later&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“WeakRefs allow GC’d objects to be referenced weakly, and FinalizationRegistry lets you clean them up. Use for caches, not program logic.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 📆 Temporal API (Proposal Stage 3)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
New Date/Time API to replace &lt;code&gt;Date&lt;/code&gt; (which is broken).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Immutable, time zone aware, clear APIs.&lt;/li&gt;
&lt;li&gt;Objects: &lt;code&gt;PlainDate&lt;/code&gt;, &lt;code&gt;PlainTime&lt;/code&gt;, &lt;code&gt;ZonedDateTime&lt;/code&gt;, &lt;code&gt;Duration&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Fixes DST bugs, leap second issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Temporal&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@js-temporal/polyfill&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Temporal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plainDateISO&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;today&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;days&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Temporal is the modern Date/Time API: immutable, time-zone aware, and accurate. It’s the future replacement for JS Date.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 📦 Dynamic Import
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;import()&lt;/code&gt; loads modules dynamically at runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Returns a promise.&lt;/li&gt;
&lt;li&gt;Enables conditional/lazy loading.&lt;/li&gt;
&lt;li&gt;Used for code-splitting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mod&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./math.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;mod&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Dynamic import lets you load modules at runtime. It returns a promise, enabling conditional and lazy loading.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. 🎯 Logical Assignment Operators
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Shorthand operators for logical + assignment.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;||=&lt;/code&gt; assigns if falsy.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;&amp;amp;=&lt;/code&gt; assigns if truthy.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;??=&lt;/code&gt; assigns if null/undefined.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;||=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// a = 5&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;||=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// b = 5&lt;/span&gt;
&lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;??=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// b = 0 (unchanged)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Logical assignment operators (||=, &amp;amp;&amp;amp;=, ??=) combine short-circuiting with assignment. Handy for defaults and conditionals.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  9. 🧾 Numeric Separators
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Underscores in numbers for readability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;big&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;_000_000_000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;big&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 1000000000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Numeric separators make large numbers readable, but don’t affect the value.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🟦 Core JavaScript — Expert-Level Revision
&lt;/h1&gt;

&lt;h1&gt;
  
  
  🟦 Patterns &amp;amp; Architecture in JavaScript
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. 📦 Module Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Encapsulates private state using closures, exposing only a public API.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Common before ES6 modules (&lt;code&gt;import/export&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Uses IIFEs (Immediately Invoked Function Expressions).&lt;/li&gt;
&lt;li&gt;Prevents polluting global scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// private&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The module pattern hides implementation details with closures and exposes a controlled API. It was the precursor to ES modules.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. 👁️ Observer Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
One-to-many dependency: when subject changes, observers are notified.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Basis for event systems.&lt;/li&gt;
&lt;li&gt;Used in RxJS, MobX, DOM events.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Subject&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;observers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;observers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;observers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;subject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Subject&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Got:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“The observer pattern lets many listeners react when one subject changes. It underlies events, RxJS, and reactive libraries.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. 📡 Pub/Sub Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Decouples publishers from subscribers via a mediator (event bus).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pub/Sub is like Observer but with a &lt;strong&gt;broker&lt;/strong&gt; in between.&lt;/li&gt;
&lt;li&gt;Subscribers don’t know who published the event.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;subscribe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;concat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;publish&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[]).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nx"&gt;bus&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Pub/Sub decouples producers and consumers with an event bus. Unlike Observer, subscribers don’t directly attach to the subject.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. 🧑‍🤝‍🧑 Singleton Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Restricts a class/module to a single instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Common for global state, config, caches.&lt;/li&gt;
&lt;li&gt;Enforced via closures or static variables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Singleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Singleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;Singleton&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Singleton&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Singleton ensures one instance globally — useful for config, caches, or logging, but overuse makes testing harder.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. 🏭 Factory Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Function/class that creates objects without exposing the creation logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Encapsulates instantiation.&lt;/li&gt;
&lt;li&gt;Can return different subclasses depending on arguments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;guest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Factory abstracts object creation, returning different variants without exposing constructor details.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. 🧩 Prototype Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Creates new objects by cloning existing ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In JS, all objects already inherit via prototypes.&lt;/li&gt;
&lt;li&gt;Object cloning often uses &lt;code&gt;Object.create(proto)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;dog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;speak&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// "Hi"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Prototype pattern creates objects by cloning existing ones. In JavaScript, it’s built into the language via &lt;code&gt;Object.create&lt;/code&gt;.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. 🧮 Functional Patterns (FP in JS)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Immutability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Avoid mutating objects/arrays; use spread or &lt;code&gt;Object.assign&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Function Composition
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;compose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;g&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;double&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;square&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;square&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// (3*2)^2 = 36&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Pipeline (proposed &lt;code&gt;|&amp;gt;&lt;/code&gt; operator)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;More readable left-to-right function chaining.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“FP patterns in JS emphasize immutability, pure functions, and composition. Composition allows small functions to build complex logic.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. ⚖️ Strategy Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Encapsulates interchangeable algorithms behind a common interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Payment&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strategy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Paypal&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PayPal:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Stripe&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Stripe:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Payment&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setStrategy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Paypal&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;payment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// PayPal: 100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Strategy encapsulates interchangeable algorithms, letting you switch behaviors dynamically.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  9. 🕵️ Decorator Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Adds functionality to objects without modifying them.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Popular in React (HOCs).&lt;/li&gt;
&lt;li&gt;In ES, decorator syntax (&lt;code&gt;@&lt;/code&gt;) is in proposal stage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;withLogging&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Args:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loggedSum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;withLogging&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;loggedSum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Logs args&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Decorator adds behavior to functions or objects without modifying the original — e.g., React HOCs.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  10. 🕸️ Middleware Pattern
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt;&lt;br&gt;
Chain of functions where each step can process input and pass to next.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Popular in Express.js, Redux.&lt;/li&gt;
&lt;li&gt;Flexible for cross-cutting concerns (logging, auth).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;compose&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ["a","b"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Interview One-Liner
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Middleware composes a pipeline of functions where each can act and forward. Used in Express, Redux, Koa.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ✅ Summary (Full Handbook)
&lt;/h1&gt;

&lt;p&gt;This handbook covers expert-level JavaScript concepts in depth:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Closures, Scope, Hoisting, &lt;code&gt;this&lt;/code&gt;, Prototypes, Event Loop&lt;/li&gt;
&lt;li&gt;Asynchronous JavaScript (Timers, Promises, async/await, Generators, Debounce/Throttle, rAF, Workers)&lt;/li&gt;
&lt;li&gt;Advanced Objects &amp;amp; Memory (GC, Symbols, WeakMap/WeakSet, Descriptors, Proxy/Reflect, Immutability)&lt;/li&gt;
&lt;li&gt;Advanced Functions &amp;amp; ES6+ (HOFs, Currying, Modules, Destructuring, Params, Iterables, Map/Set, ES6+)&lt;/li&gt;
&lt;li&gt;Browser &amp;amp; DOM (Event Delegation, Reflow vs Repaint, DOM APIs, Storage, Security, Service Workers, CRP, Loading)&lt;/li&gt;
&lt;li&gt;Performance &amp;amp; Optimization (Leaks, Lazy Loading, Tree-shaking, Web Vitals, Async Scheduling, Bundling, Rendering)&lt;/li&gt;
&lt;li&gt;Advanced Types &amp;amp; Equality (Truthy/Falsy, == vs ===, NaN/-0, Object.is, Wrappers, typeof quirks, Coercion)&lt;/li&gt;
&lt;li&gt;Error Handling &amp;amp; Debugging (try/catch, Error types, Custom errors, Async handling, Global handlers, Debugging)&lt;/li&gt;
&lt;li&gt;Concurrency &amp;amp; Parallelism (Single-threaded model, Event Loop, Workers, SharedArrayBuffer, Node parallelism)&lt;/li&gt;
&lt;li&gt;ESNext &amp;amp; Modern Features (BigInt, Optional Chaining, Nullish, Top-level await, WeakRefs, Temporal, Imports, Operators)&lt;/li&gt;
&lt;li&gt;Patterns &amp;amp; Architecture (Module, Observer, Pub/Sub, Singleton, Factory, Prototype, FP, Strategy, Decorator, Middleware)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>interview</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Fundamentals of Functional JavaScript</title>
      <dc:creator>Animesh Pandey</dc:creator>
      <pubDate>Sat, 06 Mar 2021 13:40:30 +0000</pubDate>
      <link>https://forem.com/anmshpndy/functional-javascript-fundamentals-44f2</link>
      <guid>https://forem.com/anmshpndy/functional-javascript-fundamentals-44f2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Is &lt;em&gt;Functional Programming&lt;/em&gt; any style of code that utilizes &lt;em&gt;functions&lt;/em&gt;? If only it was that simple!&lt;br&gt;
Functions are indeed at the core of &lt;em&gt;Functional Programming&lt;/em&gt;, but it's how we &lt;em&gt;use&lt;/em&gt; those functions that make our implementation &lt;em&gt;functional&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This article aims to lay down some fundamentals of &lt;em&gt;Functional Programming&lt;/em&gt;, while mainly pertaining to their application in &lt;code&gt;JavaScript&lt;/code&gt;, that will help you understand :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What are &lt;strong&gt;Functions&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functions&lt;/strong&gt; &lt;em&gt;versus&lt;/em&gt; &lt;strong&gt;Procedures&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Declarative&lt;/strong&gt; &lt;em&gt;versus&lt;/em&gt; &lt;strong&gt;Imperative&lt;/strong&gt; Programming&lt;/li&gt;
&lt;li&gt;Understanding Function &lt;strong&gt;Inputs&lt;/strong&gt; and &lt;strong&gt;Outputs&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These foundations will immensely aid you in grasping further concepts of &lt;em&gt;Functional JavaScript&lt;/em&gt;, to be covered in future articles, if this one helps.&lt;/p&gt;

&lt;p&gt;The next article will cover :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Function Purity&lt;/strong&gt; (Pure &lt;em&gt;versus&lt;/em&gt; Impure Functions)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Side Effects&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Extracting and Containing &lt;strong&gt;Impurity&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How all of this collectively defines &lt;em&gt;what&lt;/em&gt; &lt;strong&gt;Functional Programming&lt;/strong&gt; is, and &lt;em&gt;why&lt;/em&gt; it is used&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;JavaScript&lt;/code&gt; a &lt;em&gt;Functional Programming&lt;/em&gt; Language?&lt;/li&gt;
&lt;li&gt;Why consider &lt;strong&gt;&lt;em&gt;Functional Programming&lt;/em&gt;&lt;/strong&gt; style for your code?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stay tuned!&lt;/p&gt;


&lt;h2&gt;
  
  
  1. What are &lt;em&gt;Functions&lt;/em&gt;?
&lt;/h2&gt;

&lt;p&gt;Well, like any introductory programming class will tell you, a function is a &lt;em&gt;reusable piece of code that performs some task upon execution&lt;/em&gt;. While this definition is reasonable, it misses out an important perspective that is the core of a function as it applies to Functional Programming.&lt;/p&gt;

&lt;p&gt;Let's try to understand &lt;strong&gt;Functions&lt;/strong&gt; more completely, with the example of very basic Mathematics.&lt;/p&gt;

&lt;p&gt;You may remember reading about &lt;code&gt;f(x)&lt;/code&gt; in school, or the equation &lt;code&gt;y = f(x)&lt;/code&gt;.&lt;br&gt;
Let's assume the equation &lt;code&gt;f(x) = x&lt;sup&gt;2&lt;/sup&gt; - 1&lt;/code&gt;. What does that mean? What does it mean to graph that equation? Here's the graph:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nf813an60acvr7zmkbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6nf813an60acvr7zmkbq.png" alt="Plot for  raw `f(x) = x^2 - 1` endraw " width="400" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's equivalent to :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What you can notice is that for any value of &lt;code&gt;x&lt;/code&gt;, say &lt;code&gt;1&lt;/code&gt;, if you plug it into the equation, you get &lt;code&gt;0&lt;/code&gt;. What is &lt;code&gt;0&lt;/code&gt;, though? It's the return value of the &lt;code&gt;f(x)&lt;/code&gt; function, which we earlier said represents a &lt;code&gt;y&lt;/code&gt; value.&lt;/p&gt;

&lt;p&gt;In math, a function always takes input(s), and always gives an output. A term you'll often hear around FP is "morphism"; this is a fancy way of describing a set of values that maps to another set of values, like the inputs of a function related to the outputs of that function.&lt;/p&gt;

&lt;p&gt;In our code, however, we can define functions with all sorts of input(s) and output(s), even though they'll rarely be interpreted as a visually plotted curve on a graph.&lt;/p&gt;

&lt;p&gt;As such, a more complete definition of function would be :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;A function is the semantic relationship between input and computed output.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Also note the usage of &lt;code&gt;function&lt;/code&gt; and &lt;em&gt;function&lt;/em&gt; throughout this article. While &lt;em&gt;function&lt;/em&gt; is the concept we're discussing, &lt;code&gt;function&lt;/code&gt; is just the &lt;code&gt;JavaScript keyword&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essentially, &lt;em&gt;Functional Programming&lt;/em&gt; is about embracing using &lt;code&gt;functions&lt;/code&gt; as &lt;em&gt;functions in this mathematical sense&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Functions vs Procedures?
&lt;/h2&gt;

&lt;p&gt;The terms &lt;strong&gt;Functions&lt;/strong&gt; and &lt;strong&gt;Procedures&lt;/strong&gt; are often used interchangeably, but they actually mean different things.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Procedure&lt;/strong&gt; is an arbitrary collection of functionality. It may have inputs, it may not. It may have an output (as a &lt;code&gt;return&lt;/code&gt; value), it may not.&lt;/p&gt;

&lt;p&gt;Whereas, a &lt;strong&gt;Function&lt;/strong&gt; takes input(s) and definitely always has a &lt;code&gt;return&lt;/code&gt; value.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Functional Programming&lt;/strong&gt;, we use &lt;em&gt;functions&lt;/em&gt; as much as possible, and trying to avoid &lt;em&gt;procedures&lt;/em&gt; wherever possible. All your &lt;em&gt;functions&lt;/em&gt; should take input(s) and return output(s).&lt;/p&gt;

&lt;p&gt;Based upon this knowledge, let's consider the following example :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example 1: Function or Procedure?&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;addPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;team1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;team2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;team3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;team1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;team2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;team3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;countPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTeam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;addPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTeam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;countPokémon&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="c1"&gt;// Output : 6&lt;/span&gt;

&lt;span class="nf"&gt;countPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output : 17&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Try to assess whether &lt;code&gt;function&lt;/code&gt; &lt;code&gt;addPokémon&lt;/code&gt; and &lt;code&gt;countPokémon&lt;/code&gt; are &lt;em&gt;functions&lt;/em&gt; or &lt;em&gt;procedures&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Here are some basic observations :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;addPokémon&lt;/code&gt; has a defined input, but no output specified by &lt;code&gt;return&lt;/code&gt;. It should be a &lt;em&gt;procedure&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;countPokémon&lt;/code&gt; has a defined input and a defined &lt;code&gt;return&lt;/code&gt;, so it should be a &lt;em&gt;function&lt;/em&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We're correct about &lt;code&gt;addPokémon&lt;/code&gt; being a &lt;em&gt;procedure&lt;/em&gt;, but &lt;code&gt;countPokémon&lt;/code&gt; is also a &lt;em&gt;procedure&lt;/em&gt;, and not a &lt;em&gt;function&lt;/em&gt;, since it makes a call to a &lt;em&gt;procedure&lt;/em&gt; within itself.&lt;/p&gt;

&lt;p&gt;In summary :&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note that a &lt;code&gt;function&lt;/code&gt; that calls a &lt;em&gt;procedure&lt;/em&gt; within itself, is also a &lt;em&gt;procedure&lt;/em&gt;. The &lt;strong&gt;"impurity"&lt;/strong&gt; of a &lt;em&gt;procedure&lt;/em&gt;, which is a concept to be explained further down, trickles down and "pollutes" all those who directly or indirectly call it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Now, we would probably like to understand how to convert the last example's &lt;em&gt;procedures&lt;/em&gt; into &lt;em&gt;functions&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Based on the more complete definition of a &lt;em&gt;function&lt;/em&gt; mentioned in the last section, try to make changes to the last example, before looking ahead for one of many possible solutions. For this example, it should be pretty straight-forward.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example 2: Converting Procedures to Functions?&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;addPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;team1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;team2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;team3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;team1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;team2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;team3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// Instead of logging a value, we returned it,&lt;/span&gt;
    &lt;span class="c1"&gt;// so there's a proper output/return now.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;countPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTeam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;addPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentTeam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// Now, a call to a function, not a procedure, is returned&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;countPokémon&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="c1"&gt;// Output : 6&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;countPokémon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Output : 17&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Let's look at one more example for differentiating &lt;em&gt;procedures&lt;/em&gt; and &lt;em&gt;functions&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example 3. Identifying functions and procedures&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;neighbouringPokémonID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateNeighboursForTeam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;team&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;teamIDs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;team&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;teamIDs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;neighbouringPokémonID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;myTeam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pikachu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="mi"&gt;155&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cyndaquil&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nf"&gt;generateNeighboursForTeam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myTeam&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output :&lt;/span&gt;
&lt;span class="c1"&gt;// [24, 26]&lt;/span&gt;
&lt;span class="c1"&gt;// [154, 156]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This snippet effectively returns the Pokédex IDs of the immediate neighbours of a Pokémon, given its own ID.&lt;/p&gt;

&lt;p&gt;Clearly, &lt;code&gt;neighbouringPokémonID&lt;/code&gt; is a &lt;em&gt;function&lt;/em&gt;, as it has an input and &lt;code&gt;return&lt;/code&gt;s an output based upon it.&lt;/p&gt;

&lt;p&gt;Also, &lt;code&gt;generateNeighboursForTeam&lt;/code&gt; is a &lt;em&gt;procedure&lt;/em&gt;, as it doesn't &lt;code&gt;return&lt;/code&gt; anything.&lt;/p&gt;

&lt;p&gt;Once again, we can modify this example such that both are &lt;em&gt;functions&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example 4. Converting the procedure to a function&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;neighbouringPokémonID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateNeighboursForTeam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;team&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;teamIDs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;team&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;neighbourIDs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
    &lt;span class="c1"&gt;// Use a temporary array to store computation&lt;/span&gt;
    &lt;span class="nx"&gt;teamIDs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
        &lt;span class="nx"&gt;neighbourIDs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;neighbouringPokémonID&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;neighbourIDs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;myTeam&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pikachu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="mi"&gt;155&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cyndaquil&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nf"&gt;generateNeighboursForTeam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myTeam&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output :&lt;/span&gt;
&lt;span class="c1"&gt;// [[24, 26],[154, 156]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Declarative vs Imperative Programming?
&lt;/h2&gt;

&lt;p&gt;Another basic concept to be familiar with is, the distinction between &lt;strong&gt;Declarative&lt;/strong&gt; and &lt;strong&gt;Imperative&lt;/strong&gt; styles of coding, which is honestly a bit relative in its meaning.&lt;/p&gt;

&lt;p&gt;There's no style that's absolutely &lt;strong&gt;Declarative&lt;/strong&gt; or absolutely &lt;strong&gt;Imperative&lt;/strong&gt;. &lt;em&gt;It's a spectrum in itself.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That said, let's introduce ourselves to a common, simple definition.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“&lt;em&gt;Imperative&lt;/em&gt; programming is like &lt;em&gt;how&lt;/em&gt; you do something, and &lt;em&gt;Declarative&lt;/em&gt; programming is more like &lt;em&gt;what&lt;/em&gt; you do.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's a bit ambiguous and open-ended, so let's take a small example.&lt;/p&gt;

&lt;p&gt;Suppose, you are trying to help your little brother with the basics of the latest Pokémon game. Specifically, about catching wild Pokémon.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Declarative&lt;/em&gt;: Throw a pokéball when the pokémon is weak. &lt;em&gt;(What to do)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Imperative&lt;/em&gt;: When the health bar of the pokémon is below 30%, press X to throw a pokéball. &lt;em&gt;(Exactly how to do it)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In general, explicitly listing out all the steps one by one, is &lt;strong&gt;Imperative&lt;/strong&gt;. It's rather robotic to understand, and requires going through it line by line.&lt;/p&gt;

&lt;p&gt;And utilizing some level of abstraction and trusted helper functions, to list the steps in a manner in which it only presents the basic idea, is &lt;strong&gt;Declarative&lt;/strong&gt;. It's easier to understand, as we don't need to bother about &lt;strong&gt;how&lt;/strong&gt; something is happening, rather &lt;strong&gt;what&lt;/strong&gt; is happening.&lt;/p&gt;

&lt;p&gt;As &lt;strong&gt;&lt;em&gt;what&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;how&lt;/em&gt;&lt;/strong&gt; can be rather subjective, we can't draw a hard boundary around what is &lt;em&gt;declarative&lt;/em&gt; or &lt;em&gt;imperative&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;For example, for a person programming in machine language, which is super imperative, Java can seem rather declarative. Or for a person who works on a purely functional language, like Haskell or Clojure, even &lt;em&gt;functional&lt;/em&gt; implementations in JavaScript can feel rather imperative.&lt;/p&gt;

&lt;p&gt;Our concern at the moment, which is to set the foundations of &lt;strong&gt;Functional Programming&lt;/strong&gt; and &lt;strong&gt;Functional JavaScript&lt;/strong&gt;, we need to understand that we should make our code as &lt;strong&gt;declarative&lt;/strong&gt; as possible, by utilizing &lt;strong&gt;&lt;em&gt;functions&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Moving on, let's understand a bit more about &lt;strong&gt;&lt;em&gt;Function Inputs and Outputs&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Function Inputs
&lt;/h2&gt;

&lt;p&gt;This section covers some more aspects of &lt;em&gt;Function Inputs&lt;/em&gt;, chiefly :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arguments and Parameters&lt;/li&gt;
&lt;li&gt;Defaulting Parameters&lt;/li&gt;
&lt;li&gt;Counting Inputs&lt;/li&gt;
&lt;li&gt;Arrays of Arguments&lt;/li&gt;
&lt;li&gt;Parameter Destructuring&lt;/li&gt;
&lt;li&gt;Benefits of Declarative Style&lt;/li&gt;
&lt;li&gt;Named Arguments&lt;/li&gt;
&lt;li&gt;Unordered Parameters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's get started.&lt;/p&gt;

&lt;h3&gt;
  
  
  a. Arguments and Parameters
&lt;/h3&gt;

&lt;p&gt;There's often a slight confusion about the difference between &lt;strong&gt;arguments&lt;/strong&gt; and &lt;strong&gt;parameters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Put simply, &lt;strong&gt;arguments&lt;/strong&gt; are the values you pass into a &lt;code&gt;function&lt;/code&gt;, and &lt;strong&gt;parameters&lt;/strong&gt; are the named variables inside the &lt;code&gt;function&lt;/code&gt; that receive those values.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: In JavaScript, &lt;em&gt;the number of arguments do not need to match the number of parameters&lt;/em&gt;. If you pass more arguments than you have declared parameters to receive them, the values pass in just fine.&lt;/p&gt;

&lt;p&gt;These extra arguments can be accessed in a few ways, including the &lt;code&gt;args&lt;/code&gt; object. If you pass fewer arguments, each unmatched parameter is assigned &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  b. Defaulting Parameters
&lt;/h3&gt;

&lt;p&gt;Parameters can declare default values. In the case where the argument for that parameter is not passed, or it's passed the value &lt;code&gt;undefined&lt;/code&gt;, the default assignment expression is substituted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;                &lt;span class="c1"&gt;// Output : 10&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// Output : 10&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;            &lt;span class="c1"&gt;// Output : null&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;               &lt;span class="c1"&gt;// Output : 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's always a good practice to think about any default cases that can aid the usability of your functions.&lt;/p&gt;




&lt;h3&gt;
  
  
  c. Arity, or Count of Inputs
&lt;/h3&gt;

&lt;p&gt;The number of arguments a &lt;code&gt;function&lt;/code&gt; "expects" is determined by the number of parameters that are declared.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// Output :&lt;/span&gt;
&lt;span class="c1"&gt;// 4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;f(..)&lt;/code&gt; expects &lt;code&gt;4&lt;/code&gt; arguments, as it has &lt;code&gt;4&lt;/code&gt; declared parameters. This count has a special term: &lt;strong&gt;Arity&lt;/strong&gt;, which is the number of parameters in a &lt;code&gt;function&lt;/code&gt; declaration. The &lt;strong&gt;arity&lt;/strong&gt; of &lt;code&gt;f(..)&lt;/code&gt; is &lt;code&gt;4&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Furthermore, a &lt;code&gt;function&lt;/code&gt; with &lt;strong&gt;arity&lt;/strong&gt; 1 is additionally called &lt;strong&gt;unary&lt;/strong&gt;, a &lt;code&gt;function&lt;/code&gt; with &lt;strong&gt;arity&lt;/strong&gt; 2 is also called &lt;strong&gt;binary&lt;/strong&gt;, and a &lt;code&gt;function&lt;/code&gt; with &lt;strong&gt;arity&lt;/strong&gt; 3 or higher is named &lt;strong&gt;n-ary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;length&lt;/code&gt; property of that &lt;code&gt;function&lt;/code&gt; reference returns its &lt;strong&gt;arity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;While this may sound simple, the implications are far-reaching.&lt;/p&gt;

&lt;p&gt;One reason for determining the &lt;strong&gt;arity&lt;/strong&gt; during execution would be if a piece of code received a function reference from multiple sources, and has to send different values depending on the &lt;strong&gt;arity&lt;/strong&gt; of each.&lt;/p&gt;

&lt;p&gt;For example, let's say a &lt;code&gt;fn&lt;/code&gt; function reference could expect one, two, or three arguments, but you always want to just pass a variable &lt;code&gt;x&lt;/code&gt; in the last position:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// `fn` is set to some function reference&lt;/span&gt;
&lt;span class="c1"&gt;// `x` exists with some value&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The &lt;code&gt;length&lt;/code&gt; property of a function is read-only and it's determined at the time you declare the function. It should be thought of as essentially a piece of metadata that describes something about the intended usage of the function.&lt;/p&gt;

&lt;p&gt;One gotcha to be aware of is that certain kinds of parameter list variations can make the &lt;code&gt;length&lt;/code&gt; property of the function report something different than you might expect:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;baz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;             &lt;span class="c1"&gt;// Output : 1&lt;/span&gt;
&lt;span class="nx"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;             &lt;span class="c1"&gt;// Output : 1&lt;/span&gt;
&lt;span class="nx"&gt;baz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;             &lt;span class="c1"&gt;// Output : 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What about counting the number of arguments the current function call received? This was once trivial, but now the situation is slightly more complicated. Each function has an &lt;code&gt;arguments&lt;/code&gt; object (array-like) available that holds a reference to each of the arguments passed in. You can then inspect the &lt;code&gt;length&lt;/code&gt; property of &lt;code&gt;arguments&lt;/code&gt; to figure out how many were actually passed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arguments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   
&lt;span class="c1"&gt;// Output : &lt;/span&gt;
&lt;span class="c1"&gt;// 2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As of ES5 (and strict mode, specifically), &lt;code&gt;arguments&lt;/code&gt; is considered by some to be sort of deprecated; many avoid using it if possible. However, &lt;code&gt;arguments.length&lt;/code&gt;, and only that, is okay to keep using for those cases where you need to care about the passed number of arguments.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A function signature that accepts an indeterminate amount of arguments is referred to as a &lt;strong&gt;&lt;em&gt;variadic&lt;/em&gt;&lt;/strong&gt; function.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Say you do need to access the arguments in a positional array-like way, possibly because you're accessing an argument that doesn't have a formal parameter at that position. How do we do it?&lt;/p&gt;

&lt;p&gt;ES6 to the rescue! Let's declare our function with the &lt;code&gt;...&lt;/code&gt; operator, referred to as "spread", "rest", or "gather":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;,...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;...args&lt;/code&gt; in the parameter list is an ES6 declarative form that tells the engine to collect all remaining arguments (if any) not assigned to named parameters, and put them in a real array named &lt;code&gt;args&lt;/code&gt;. &lt;code&gt;args&lt;/code&gt; will always be an array, even if it's empty. But it &lt;strong&gt;will not&lt;/strong&gt; include values that are assigned to the &lt;code&gt;x&lt;/code&gt;, &lt;code&gt;y&lt;/code&gt;, and &lt;code&gt;z&lt;/code&gt; parameters, only anything else that's passed in beyond those first three values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;,...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;                &lt;span class="c1"&gt;// undefined undefined undefined []&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         &lt;span class="c1"&gt;// 1 2 3 []&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// 1 2 3 [ 4 ]&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// 1 2 3 [ 4, 5 ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, if you want to design a function that can account for an arbitrary number of arguments, use &lt;code&gt;...args&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can use the &lt;code&gt;...&lt;/code&gt; operator in the parameter list even if there are no other formal parameters declared.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;args&lt;/code&gt; will now be the complete array of arguments, whatever they are, and you can use &lt;code&gt;args.length&lt;/code&gt; to know exactly how many arguments have been passed in.&lt;/p&gt;




&lt;h3&gt;
  
  
  d. Arrays of Arguments
&lt;/h3&gt;

&lt;p&gt;What if you wanted to pass along an array of values as the arguments to a function call?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  
&lt;span class="c1"&gt;// Output :                    &lt;/span&gt;
&lt;span class="c1"&gt;// 4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our new friend, the &lt;code&gt;...&lt;/code&gt; operator is used here, but now not just in the parameter list; it's also used in the argument list at the call-site.&lt;/p&gt;

&lt;p&gt;It has the opposite behavior in this context.&lt;br&gt;
In a parameter list, we said it &lt;em&gt;gathered&lt;/em&gt; arguments together. In an argument list, it &lt;em&gt;spreads&lt;/em&gt; them out. So the contents of &lt;code&gt;arr&lt;/code&gt; are actually spread out as individual arguments to the &lt;code&gt;f(..)&lt;/code&gt; call.&lt;/p&gt;

&lt;p&gt;Also, multiple values and &lt;code&gt;...&lt;/code&gt; spreadings can be interweaved, as needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;  
&lt;span class="c1"&gt;// Output :   &lt;/span&gt;
&lt;span class="c1"&gt;// 4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Think of &lt;code&gt;...&lt;/code&gt; in this symmetric sense: in a value-list position, it &lt;em&gt;spreads&lt;/em&gt;. In an assignment position -- like a parameter list, because arguments get &lt;em&gt;assigned to&lt;/em&gt; parameters -- it &lt;em&gt;gathers&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;...&lt;/code&gt; makes working with arrays of arguments much easier.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  e. Parameter Destructuring
&lt;/h3&gt;

&lt;p&gt;Consider the variadic &lt;code&gt;f(..)&lt;/code&gt; from the previous section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;...[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What if we wanted to change that interaction so the caller of our function passes in an array of values instead of individual argument values? Just drop the two &lt;code&gt;...&lt;/code&gt; usages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple enough. But what if now we wanted to give a parameter name to each of the first two values in the passed-in array? We aren't declaring individual parameters anymore, so it seems we lost that ability.&lt;/p&gt;

&lt;p&gt;Thankfully, ES6 &lt;strong&gt;destructuring&lt;/strong&gt; is the answer. &lt;strong&gt;Destructuring&lt;/strong&gt; is a way to declare a &lt;em&gt;pattern&lt;/em&gt; for the kind of structure (object, array, etc.) that you expect to see, and how decomposition (assignment) of its individual parts should be processed.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do you spot the &lt;code&gt;[ .. ]&lt;/code&gt; brackets around the parameter list now? This is called &lt;strong&gt;array parameter destructuring&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this example, destructuring tells the engine that an array is expected in this assignment position (aka parameter). The pattern says to take the first value of that array and assign it to a local parameter variable called &lt;code&gt;x&lt;/code&gt;, the second to &lt;code&gt;y&lt;/code&gt;, and whatever is left is &lt;em&gt;gathered&lt;/em&gt; into &lt;code&gt;args&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  f. Benefits of Declarative Style
&lt;/h3&gt;

&lt;p&gt;Considering the destructured &lt;code&gt;f(..)&lt;/code&gt; we just looked at, we could instead have processed the parameters manually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// something&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But here we highlight a principle that &lt;strong&gt;declarative&lt;/strong&gt; code communicates more effectively than &lt;strong&gt;imperative&lt;/strong&gt; code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Declarative&lt;/strong&gt; code (for example, the &lt;strong&gt;destructuring&lt;/strong&gt; in the former &lt;code&gt;f(..)&lt;/code&gt; snippet, or the &lt;code&gt;...&lt;/code&gt; operator usages) focuses on what the outcome of a piece of code should be.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Imperative&lt;/strong&gt; code (such as the manual assignments in the latter snippet) focuses more on how to get the outcome. The outcome is &lt;em&gt;coded&lt;/em&gt; there, but it's not as clear because it's crowded by the details of &lt;em&gt;how&lt;/em&gt; we got there.&lt;/p&gt;

&lt;p&gt;The earlier &lt;code&gt;f(..)&lt;/code&gt; is regarded as more readable, because the &lt;strong&gt;destructuring&lt;/strong&gt; hides the unnecessary details of &lt;em&gt;how&lt;/em&gt; to manage the parameter inputs.&lt;/p&gt;

&lt;p&gt;Wherever possible, &lt;strong&gt;we should strive for declarative, self-explanatory code.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  g. Named Arguments
&lt;/h3&gt;

&lt;p&gt;Just as we can destructure array parameters, we can destructure object parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Output :                                      &lt;/span&gt;
&lt;span class="c1"&gt;// undefined 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We pass in an object as the single argument, and it's destructured into two separate parameter variables &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt;, which are assigned the values of those corresponding property names from the object passed in. It didn't matter that the &lt;code&gt;x&lt;/code&gt; property wasn't on the object; it just ended up as a variable with &lt;code&gt;undefined&lt;/code&gt; like you'd expect.&lt;/p&gt;

&lt;p&gt;With a normal call-site like &lt;code&gt;f(undefined,3)&lt;/code&gt;, &lt;strong&gt;position&lt;/strong&gt; is used to map from argument to parameter; we put the &lt;code&gt;3&lt;/code&gt; in the second position to get it assigned to a &lt;code&gt;y&lt;/code&gt; parameter.&lt;/p&gt;

&lt;p&gt;But at this call-site where parameter destructuring is involved, a simple &lt;strong&gt;object-property&lt;/strong&gt; indicates which parameter (&lt;code&gt;y&lt;/code&gt;) the argument value &lt;code&gt;3&lt;/code&gt; should be assigned to.&lt;/p&gt;

&lt;p&gt;Some languages have an explicit feature for this: &lt;strong&gt;&lt;em&gt;named arguments&lt;/em&gt;&lt;/strong&gt;. In other words, at the call-site, labeling an input value to indicate which parameter it maps to. JavaScript doesn't have named arguments, but parameter object destructuring is the next best thing.&lt;/p&gt;




&lt;h3&gt;
  
  
  h. Unordered Parameters
&lt;/h3&gt;

&lt;p&gt;Another key benefit is that named arguments, by virtue of being specified as object properties, are not fundamentally ordered. That means we can specify inputs in whatever order we want:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;  
&lt;span class="c1"&gt;// Output :                  &lt;/span&gt;
&lt;span class="c1"&gt;// undefined 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The call-site is no longer cluttered by ordered-placeholders like &lt;code&gt;undefined&lt;/code&gt; to skip a parameter.&lt;/p&gt;




&lt;h2&gt;
  
  
  Function Outputs
&lt;/h2&gt;

&lt;p&gt;This section covers some more aspects of &lt;em&gt;Function Outputs&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In JavaScript, &lt;code&gt;functions&lt;/code&gt; always &lt;code&gt;return&lt;/code&gt; a value. These three functions all have identical &lt;code&gt;return&lt;/code&gt; behavior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;baz&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;undefined&lt;/code&gt; value is implicitly &lt;code&gt;returned&lt;/code&gt; if you have no &lt;code&gt;return&lt;/code&gt; or if you just have an empty &lt;code&gt;return;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But keeping as much with the spirit of &lt;strong&gt;Functional Programming function&lt;/strong&gt; definition as possible -- using functions and not procedures -- our functions should always have outputs, which means they should explicitly &lt;code&gt;return&lt;/code&gt; a value, and usually not &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;return&lt;/code&gt; statement can only return a single value. So if your function needs to return multiple values, your only viable option is to collect them into a compound value like an array or an object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;retValue1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;retValue2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;retValue1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;retValue2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, we'll assign &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; from two respective items in the array that comes back from &lt;code&gt;f()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output : 4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Collecting multiple values into an array (or object) to return, and subsequently destructuring those values back into distinct assignments, is a way to transparently express multiple outputs for a function.&lt;/p&gt;

&lt;p&gt;Let's cover some concepts related to &lt;em&gt;Function Outputs&lt;/em&gt;, chiefly :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Early Returns&lt;/li&gt;
&lt;li&gt;Un&lt;code&gt;return&lt;/code&gt;ed Outputs&lt;/li&gt;
&lt;li&gt;Higher-Order Functions (HOFs or Functions of Functions)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  a. Early Returns
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;return&lt;/code&gt; statement doesn't just return a value from a &lt;code&gt;function&lt;/code&gt;. It's also a flow control structure; it ends the execution of the &lt;code&gt;function&lt;/code&gt; at that point.&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;function&lt;/code&gt; with multiple &lt;code&gt;return&lt;/code&gt; statements thus has multiple possible exit points, meaning that it may be harder to read a function to understand its output behavior if there are many paths that could produce that output.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// Output : 2&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// Output : 2&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// Output : 8&lt;/span&gt;
&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Output : 13&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First off, &lt;code&gt;f(x)&lt;/code&gt; is highly unreadable and difficult to follow. Dry-running this in your mind is quite tedious. That's because we're using &lt;code&gt;return&lt;/code&gt; not just to return different values, but also as a flow control construct to quit a function's execution early in certain cases.&lt;/p&gt;

&lt;p&gt;Consider this version of the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;retValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;retValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;retValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This version is unquestionably more verbose. But it is slightly simpler logic to follow, because every branch where &lt;code&gt;retValue&lt;/code&gt; can get set is &lt;em&gt;guarded&lt;/em&gt; by the condition that checks if it's already been set.&lt;/p&gt;

&lt;p&gt;Rather than &lt;code&gt;return&lt;/code&gt;ing from the function early, we used normal flow control (&lt;code&gt;if&lt;/code&gt; logic) to determine the &lt;code&gt;retValue&lt;/code&gt;'s assignment. At the end, we simply &lt;code&gt;return retValue&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In summary, it's more readable to have just a single &lt;code&gt;return&lt;/code&gt; at the end. Try to figure out the most explicit way to express the logic.&lt;/p&gt;




&lt;h3&gt;
  
  
  b. Un&lt;code&gt;return&lt;/code&gt;ed Outputs
&lt;/h3&gt;

&lt;p&gt;One technique that you've probably used in most code you've written, and maybe didn't even think about it much, is to have a function output some or all of its values by simply changing variables outside itself.&lt;/p&gt;

&lt;p&gt;Remember our &lt;code&gt;f(x) = x&lt;sup&gt;2&lt;/sup&gt; - 1&lt;/code&gt; function from earlier? We could have defined it like this in JS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We could just as easily have &lt;code&gt;return&lt;/code&gt;d the value instead of setting it into &lt;code&gt;y&lt;/code&gt; from within the function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both functions accomplish the same task, so is there any reason we should pick one version over the other?&lt;/p&gt;

&lt;p&gt;One way to explain the difference is that the &lt;code&gt;return&lt;/code&gt; in the latter version signals an &lt;strong&gt;explicit output&lt;/strong&gt;, whereas the &lt;code&gt;y&lt;/code&gt; assignment in the former is an &lt;strong&gt;implicit output&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But changing a variable in an outer scope, as we did with the &lt;code&gt;y&lt;/code&gt; assignment inside of &lt;code&gt;f(..)&lt;/code&gt;, is just one way of achieving an implicit output. A more subtle example is making changes to non-local values via reference.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;84&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output : &lt;/span&gt;
&lt;span class="c1"&gt;// 124&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The most obvious output from this function is the sum &lt;code&gt;124&lt;/code&gt;, which we explicitly &lt;code&gt;return&lt;/code&gt;ed. But instead of an &lt;code&gt;undefined&lt;/code&gt; empty slot value in position &lt;code&gt;4&lt;/code&gt;, now there's a &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The harmless looking &lt;code&gt;list[i] = 0&lt;/code&gt; operation ended up affecting the array value on the outside, even though we operated on a local &lt;code&gt;list&lt;/code&gt; parameter variable.&lt;/p&gt;

&lt;p&gt;Why? Because &lt;code&gt;list&lt;/code&gt; holds a reference-copy of the &lt;code&gt;nums&lt;/code&gt; reference, not a value-copy of the &lt;code&gt;[1,3,9,..]&lt;/code&gt; array value. JavaScript uses references and reference-copies for arrays, objects, and functions, so we may create an accidental output from our function all too easily.&lt;/p&gt;

&lt;p&gt;This implicit function output has a special name in the FP world: &lt;strong&gt;Side Effects&lt;/strong&gt;. And a function that has &lt;em&gt;no side effects&lt;/em&gt; also has a special name: &lt;strong&gt;Pure Function&lt;/strong&gt;. Both these concepts will be covered in the next article.&lt;/p&gt;




&lt;h3&gt;
  
  
  c. &lt;em&gt;Higher-Order&lt;/em&gt; Functions (HOFs or Functions of Functions)
&lt;/h3&gt;

&lt;p&gt;Functions can receive and return values of any type. A function that receives or returns one or more other function values has the special name: &lt;strong&gt;&lt;em&gt;higher-order function&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Output :&lt;/span&gt;
&lt;span class="c1"&gt;// 1 2 3 4 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;forEach(..)&lt;/code&gt; is a higher-order function because it receives a function as an argument.&lt;/p&gt;

&lt;p&gt;A higher-order function can also output another function, like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Output :&lt;/span&gt;
&lt;span class="c1"&gt;// HELLO!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;return&lt;/code&gt; is not the only way to "output" an inner function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;upper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;g&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Output :&lt;/span&gt;
&lt;span class="c1"&gt;// HELLO!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Functions that treat other functions as values are &lt;strong&gt;higher-order functions&lt;/strong&gt; by definition. These are very crucial to Functional Programming!&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;We covered the following concepts in this article :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What are &lt;strong&gt;Functions&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functions&lt;/strong&gt; &lt;em&gt;versus&lt;/em&gt; &lt;strong&gt;Procedures&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Declarative&lt;/strong&gt; &lt;em&gt;versus&lt;/em&gt; &lt;strong&gt;Imperative&lt;/strong&gt; Programming&lt;/li&gt;
&lt;li&gt;Function &lt;strong&gt;Inputs&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Arguments and Parameters&lt;/li&gt;
&lt;li&gt;Defaulting Parameters&lt;/li&gt;
&lt;li&gt;Counting Inputs&lt;/li&gt;
&lt;li&gt;Arrays of Arguments&lt;/li&gt;
&lt;li&gt;Parameter Destructuring&lt;/li&gt;
&lt;li&gt;Benefits of Declarative Style&lt;/li&gt;
&lt;li&gt;Named Arguments&lt;/li&gt;
&lt;li&gt;Unordered Parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Function &lt;strong&gt;Outputs&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Early Returns&lt;/li&gt;
&lt;li&gt;Un&lt;code&gt;return&lt;/code&gt;ed Outputs&lt;/li&gt;
&lt;li&gt;Higher-Order Functions (HOFs or Functions of Functions)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The next article will cover :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Function Purity&lt;/strong&gt; (Pure &lt;em&gt;versus&lt;/em&gt; Impure Functions)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Side Effects&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Extracting and Containing &lt;strong&gt;Impurity&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How all of this collectively defines &lt;em&gt;what&lt;/em&gt; &lt;strong&gt;Functional Programming&lt;/strong&gt; is, and &lt;em&gt;why&lt;/em&gt; it is used&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;JavaScript&lt;/code&gt; a &lt;em&gt;Functional Programming&lt;/em&gt; Language?&lt;/li&gt;
&lt;li&gt;Why consider &lt;strong&gt;&lt;em&gt;Functional Programming&lt;/em&gt;&lt;/strong&gt; style for your code?&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Credits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Functional-Light JS book by Kyle Simpson, for inspiring this article, as well as,&lt;/li&gt;
&lt;li&gt;FrontEnd Masters : Functional-Light JavaScript&lt;/li&gt;
&lt;/ul&gt;



&lt;h3&gt;
  
  
  Thanks a lot for reading! ❤️
&lt;/h3&gt;





&lt;center&gt;Follow me?&lt;center&gt;

&lt;p&gt;
&lt;a href="https://dev.to/anmshpndy"&gt;Dev.to&lt;/a&gt; |
&lt;a href="https://twitter.com/anmshpndy" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; | 
&lt;a href="https://hashnode.com/@anmshpndy" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; | 
&lt;a href="https://anmshpndy.medium.com/" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; |  
&lt;a href="https://github.com/AnimeshPandey" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | 
&lt;a href="https://www.linkedin.com/in/pandeyanimesh/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; |
&lt;a href="https://www.buymeacoffee.com/anmshpndy" rel="noopener noreferrer"&gt;Buy Me A Coffee&lt;/a&gt;
&lt;/p&gt;


&lt;/center&gt;
&lt;br&gt;
&lt;/center&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>How well do you know “this”?</title>
      <dc:creator>Animesh Pandey</dc:creator>
      <pubDate>Sun, 28 Feb 2021 01:07:45 +0000</pubDate>
      <link>https://forem.com/anmshpndy/how-well-do-you-know-this-2cg1</link>
      <guid>https://forem.com/anmshpndy/how-well-do-you-know-this-2cg1</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;What’s “this”?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In the simplest of terms, the JavaScript keyword &lt;code&gt;this&lt;/code&gt; refers to the object it belongs to on runtime, depending upon its &lt;strong&gt;call-site&lt;/strong&gt; (where it is called).&lt;/p&gt;

&lt;p&gt;However, understanding what it would refer to in any given context, requires a slightly deeper understanding of some relevant concepts, which will be covered in this article.&lt;/p&gt;

&lt;p&gt;Just to start with, &lt;code&gt;this&lt;/code&gt; can have the following values depending upon where it is accessed :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;By default&lt;/em&gt;&lt;/strong&gt; : &lt;code&gt;this&lt;/code&gt; refers to the &lt;code&gt;global&lt;/code&gt; object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Inside a function&lt;/em&gt;&lt;/strong&gt; : &lt;code&gt;this&lt;/code&gt; refers to the &lt;code&gt;global&lt;/code&gt; object. In &lt;code&gt;strict&lt;/code&gt; mode, however, &lt;code&gt;this&lt;/code&gt; will be &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Inside a method&lt;/em&gt;&lt;/strong&gt; : &lt;code&gt;this&lt;/code&gt; refers to the owner object. (A method is a function that belongs inside an object. In other words, it’s a function that’s an object’s property.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;In an event&lt;/em&gt;&lt;/strong&gt;: &lt;code&gt;this&lt;/code&gt; refers to the element on which the event was triggered.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Inside an Immediately Invoked Function Expression (IIFE)&lt;/em&gt;&lt;/strong&gt; : &lt;code&gt;this&lt;/code&gt; refers to the &lt;code&gt;global&lt;/code&gt; object. In &lt;code&gt;strict&lt;/code&gt; mode, &lt;code&gt;this&lt;/code&gt; will be &lt;code&gt;undefined&lt;/code&gt;, just like any other function in a global context.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Inside a Fat-Arrow function&lt;/em&gt;&lt;/strong&gt;: When a fat arrow &lt;code&gt;()=&amp;gt;&lt;/code&gt; is used to define a function, it doesn’t create a new value for &lt;code&gt;this&lt;/code&gt;, instead, it keeps referring to the same object it was referring to outside of the function.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article hopes to give you an understanding of how these values are assigned to &lt;code&gt;this&lt;/code&gt;, and how this knowledge can be utilized to suit our requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Call-Site and Call-Stack&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As discussed in the last section, we got to know that this is a &lt;strong&gt;&lt;em&gt;runtime-binding&lt;/em&gt;&lt;/strong&gt; made for each function invocation, which entirely depends upon where exactly it was called.&lt;/p&gt;

&lt;p&gt;This location in the code where the concerned function was called, is called the &lt;strong&gt;call-site&lt;/strong&gt;. An understanding of determining the &lt;strong&gt;call-site&lt;/strong&gt; is crucial towards understanding what this would be bound to, at any given point of the execution.&lt;/p&gt;

&lt;p&gt;While finding the &lt;strong&gt;&lt;em&gt;call-site&lt;/em&gt;&lt;/strong&gt; is generally as simple as locating where a function was called from, it might not always be that clear because of certain coding patterns that might obscure it.&lt;/p&gt;

&lt;p&gt;Hence, it’s important to think about the &lt;strong&gt;&lt;em&gt;call-stack&lt;/em&gt;&lt;/strong&gt;, the stack of functions that have been called to get us to the current stage of the execution which we’re concerned with.&lt;/p&gt;

&lt;p&gt;Let us take a simple example to illustrate how a &lt;strong&gt;&lt;em&gt;call-stack&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;call-site&lt;/em&gt;&lt;/strong&gt; could be determined.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;By following the chain of function calls in order, you can determine the &lt;strong&gt;call-stack and call-sites.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  * Tip for determining call-stack
&lt;/h3&gt;

&lt;p&gt;Utilize the built-in JS &lt;code&gt;debugger&lt;/code&gt; provided with any modern browser’s developer tools.&lt;/p&gt;

&lt;p&gt;In the execution of any JS code, you can set a breakpoint by using the keyword &lt;code&gt;debugger&lt;/code&gt;, to stop the execution at that point in the browser.&lt;/p&gt;

&lt;p&gt;Let’s say, we add a breakpoint when &lt;code&gt;thunderbolt()&lt;/code&gt; was called.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc04xkp8homdtzeqb4p7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc04xkp8homdtzeqb4p7s.png" alt="The **debugger** stops the execution at the custom breakpoint, and the function **call-stack** at that point can be viewed on the right side." width="800" height="359"&gt;&lt;/a&gt;The &lt;strong&gt;debugger&lt;/strong&gt; stops the execution at the custom breakpoint, and the function &lt;strong&gt;call-stack&lt;/strong&gt; at that point can be viewed on the right side.&lt;/p&gt;

&lt;p&gt;In the image above, we can see that the execution was stopped at the point where we mentioned the &lt;code&gt;debugger&lt;/code&gt; keyword, as soon as &lt;code&gt;thunderbolt()&lt;/code&gt; is called. At this point, we will not observe any execution of code that comes after the &lt;code&gt;debugger&lt;/code&gt; (just the &lt;code&gt;thunderbolt()&lt;/code&gt; log, in this case).&lt;/p&gt;

&lt;p&gt;Our primary point of interest right now, is the &lt;strong&gt;call-stack&lt;/strong&gt; which is clearly illustrated on the right-hand side, same as we determined in the example above. &lt;code&gt;(anonymous)&lt;/code&gt; at the bottom of the stack, refers to the initial global call to &lt;code&gt;choosePikachu()&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Binding rules for “this”&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now that we understand what a &lt;strong&gt;call-site&lt;/strong&gt; and a &lt;strong&gt;call-stack&lt;/strong&gt; is, we can learn about how a &lt;strong&gt;call-site&lt;/strong&gt; determines what this will hold during execution.&lt;/p&gt;

&lt;p&gt;There are &lt;strong&gt;four general rules&lt;/strong&gt; which apply. First, let’s understand them &lt;em&gt;independently&lt;/em&gt;, and then, their &lt;em&gt;order of precedence&lt;/em&gt; when multiple rules can apply to the &lt;strong&gt;call-site&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Default Binding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is the default catch-all rule, when none others apply. It comes from the most common case of a function invocation, which a standalone function call.&lt;/p&gt;

&lt;p&gt;Let’s look at the below example.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The variable &lt;code&gt;ultraBall&lt;/code&gt; declared in &lt;code&gt;global&lt;/code&gt; scope is the same as declaring a property on the &lt;code&gt;global&lt;/code&gt; object of the same name.&lt;/p&gt;

&lt;p&gt;Inside &lt;code&gt;getPokemon()&lt;/code&gt;, the reference to this defaults to the &lt;code&gt;global&lt;/code&gt; object. Hence, we would see the value of &lt;code&gt;this.ultraBall&lt;/code&gt; getting logged.&lt;/p&gt;

&lt;p&gt;However, if &lt;code&gt;strict&lt;/code&gt; mode is in effect globally or inside &lt;code&gt;getPokemon&lt;/code&gt;, the &lt;code&gt;global&lt;/code&gt; object is not permitted default binding. In that case, we will see the error &lt;code&gt;TypeError : 'this' is 'undefined'&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Implicit Binding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If the call-site has a context object (if a function is called through an owning or containing object, as its property), implicit binding applies.&lt;/p&gt;

&lt;p&gt;The rule states that, when there is a context object for a function reference, it’s &lt;em&gt;that&lt;/em&gt; object that should be used for its method calls’ &lt;code&gt;this&lt;/code&gt; binding.&lt;/p&gt;

&lt;p&gt;Let’s look at a few examples to illustrate the different cases which can arise.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Since the object &lt;code&gt;pikachu&lt;/code&gt; is the &lt;code&gt;this&lt;/code&gt; for the &lt;code&gt;getBaseSpeed&lt;/code&gt; call, &lt;code&gt;this.baseSpeed&lt;/code&gt; is synonymous to &lt;code&gt;pikachu.baseSpeed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let’s look at another example to see how only the top or last level of an Object property reference chain matters to the call-site for implicit &lt;code&gt;this&lt;/code&gt; binding.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;As we can see, the &lt;code&gt;baseSpeed&lt;/code&gt; value is still &lt;code&gt;90&lt;/code&gt;. That’s because the call to &lt;code&gt;getBaseSpeed&lt;/code&gt; is bound to its direct caller, &lt;code&gt;pikachu&lt;/code&gt;, which serves as its &lt;code&gt;this&lt;/code&gt; binding. In this context, the &lt;code&gt;baseSpeedvalue&lt;/code&gt; is &lt;code&gt;90&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let’s look at a few more examples to show common cases where implicit binding can seem unexpected.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In this example, we have lost our implicit &lt;code&gt;this&lt;/code&gt; binding to &lt;code&gt;pikachu&lt;/code&gt; in case of assigning &lt;code&gt;pikachu.getBaseSpeed&lt;/code&gt; to a different variable &lt;code&gt;baseSpeedFunction&lt;/code&gt;. Now, for &lt;code&gt;baseSpeedFunction&lt;/code&gt;, &lt;code&gt;this&lt;/code&gt; refers to the &lt;code&gt;global&lt;/code&gt; object (&lt;em&gt;default binding&lt;/em&gt; takes place). Hence, for the call, &lt;code&gt;this.baseSpeed&lt;/code&gt; will be &lt;code&gt;50&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now, a more common and not-so-obvious way this loss of implicit binding can occur is when we pass a callback function. Consider the following example :&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Once again, inside the callback function executor &lt;code&gt;executeFunction&lt;/code&gt;, we are effectively passing a reference to &lt;code&gt;pikachu.getBaseSpeedfunction&lt;/code&gt;. Upon execution, &lt;code&gt;this&lt;/code&gt; will be bound to the &lt;code&gt;global&lt;/code&gt; object again (or throw a &lt;code&gt;TypeError&lt;/code&gt;, if &lt;code&gt;strict&lt;/code&gt; mode is enabled), instead of &lt;code&gt;pikachu&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It’s quite common for function callbacks to lose their &lt;code&gt;this&lt;/code&gt; binding. Another unexpected outcome can arise when the function we’ve passed our callback to, intentionally alters the &lt;code&gt;this&lt;/code&gt; for the call. For example, &lt;em&gt;Event handlers&lt;/em&gt; in popular JavaScript libraries often modify &lt;code&gt;this&lt;/code&gt; to point to the &lt;code&gt;DOM element&lt;/code&gt; that triggered the event.&lt;/p&gt;

&lt;p&gt;You are not really in control of how your callback function reference will be executed. So far, you don’t have any way of controlling the call-site to assign the binding you intended. This is where &lt;strong&gt;&lt;em&gt;explicit binding&lt;/em&gt;&lt;/strong&gt; comes into play.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Explicit Binding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To resolve the unintended loss of &lt;code&gt;this&lt;/code&gt; with implicit binding, we can explicitly set the value of &lt;code&gt;this&lt;/code&gt; to a given object for a function call.&lt;/p&gt;

&lt;p&gt;There are several in-built methods that can help us achieve &lt;strong&gt;explicit binding&lt;/strong&gt;, like :&lt;/p&gt;

&lt;h3&gt;
  
  
  The bind() method
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;bind()&lt;/code&gt; is a method of the &lt;code&gt;Function.prototype&lt;/code&gt; property. This means &lt;code&gt;bind()&lt;/code&gt; can be used by every single function.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;bind()&lt;/code&gt; method creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function is called.&lt;/p&gt;

&lt;p&gt;In other words, &lt;code&gt;bind()&lt;/code&gt; returns a new function that is hardcoded to call the original function with the &lt;code&gt;this&lt;/code&gt; context set as specified.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h3&gt;
  
  
  The call() and apply() methods
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;call()&lt;/code&gt; and &lt;code&gt;apply()&lt;/code&gt; are also methods of the &lt;code&gt;Function.prototype&lt;/code&gt; property, with similar but slightly different usage.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;call()&lt;/code&gt; method calls a function with a given &lt;code&gt;this&lt;/code&gt; value and arguments provided individually.&lt;/p&gt;

&lt;p&gt;Whereas, the &lt;code&gt;apply()&lt;/code&gt; method calls a function with a given &lt;code&gt;this&lt;/code&gt; value, and arguments provided as an array (or an &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Indexed_collections#working_with_array-like_objects" rel="noopener noreferrer"&gt;array-like object&lt;/a&gt;).&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Invoking &lt;code&gt;Pokémon&lt;/code&gt; with explicit binding by &lt;code&gt;Pokémon.call()&lt;/code&gt; or &lt;code&gt;Pokémon.apply()&lt;/code&gt; allows us to force its &lt;code&gt;this&lt;/code&gt; to be the &lt;code&gt;this&lt;/code&gt; of function &lt;code&gt;PokémonExtension&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Also, a noteworthy aspect of the above example is that all instances of &lt;code&gt;PokémonExtension&lt;/code&gt; will bind their respective &lt;code&gt;this&lt;/code&gt; to the execution of &lt;code&gt;Pokémon&lt;/code&gt; within them. Such an explicit binding is also called &lt;strong&gt;hard binding.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. new Binding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In JavaScript, there is really no such thing as “constructor functions”, but rather construction call of functions.&lt;/p&gt;

&lt;p&gt;When a function is invoked with &lt;code&gt;new&lt;/code&gt; in front of it, otherwise known as a constructor call, the following things are done automatically.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A brand new object is created (aka constructed) out of thin air.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The newly constructed object is &lt;code&gt;[[Prototype]]&lt;/code&gt;-linked. (Out of the scope of this article)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The newly constructed object is set as the this binding for that function call.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unless the function returns its own alternate object, the new invoked function call will &lt;em&gt;automatically&lt;/em&gt; return the newly constructed object.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;All binding rules in action&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It should be clear that the &lt;em&gt;default binding&lt;/em&gt; is the lowest priority rule of the four.&lt;/p&gt;

&lt;p&gt;Let’s compare &lt;em&gt;implicit binding, explicit binding,&lt;/em&gt; and &lt;em&gt;new&lt;/em&gt; binding with each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implicit versus Explicit
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;As we saw, the &lt;em&gt;explicit binding&lt;/em&gt; of &lt;code&gt;firstAttempt.catchPokémon&lt;/code&gt; with &lt;code&gt;secondAttempt&lt;/code&gt; took precedence over its own &lt;em&gt;implicit binding&lt;/em&gt;, as it did for the second case as well.&lt;/p&gt;

&lt;p&gt;Hence, &lt;em&gt;explicit binding&lt;/em&gt; is of higher precedence than &lt;em&gt;implicit binding&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implicit versus new
&lt;/h3&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;So, &lt;em&gt;new binding&lt;/em&gt; is more precedent than &lt;em&gt;implicit binding&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Explicit versus new?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;new&lt;/code&gt; and &lt;code&gt;call&lt;/code&gt; or &lt;code&gt;apply&lt;/code&gt; cannot be used together, so something like &lt;code&gt;var fourthAttempt = new catchPokémon.call(firstAttempt);&lt;/code&gt; is not allowed to test &lt;em&gt;new binding&lt;/em&gt; directly against &lt;em&gt;explicit binding&lt;/em&gt;. But, we can still use a &lt;em&gt;hard binding&lt;/em&gt; to test the precedence of the two.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;code&gt;attemptBinder&lt;/code&gt; is hard-bound against &lt;code&gt;firstAttempt&lt;/code&gt;, but &lt;code&gt;new attemptBinder(“Steelix”)&lt;/code&gt; did not change &lt;code&gt;firstAttempt.name&lt;/code&gt; to &lt;code&gt;"Steelix"&lt;/code&gt;, as we may have expected, but it remained &lt;code&gt;"Onix"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Instead, the hard-bound call to &lt;code&gt;attemptBinder("Steelix")&lt;/code&gt; is able to be overridden with &lt;code&gt;new&lt;/code&gt; . Since &lt;code&gt;new&lt;/code&gt; was applied, we got the newly created object back, which we named &lt;code&gt;secondAttempt&lt;/code&gt;, and we see that &lt;code&gt;secondAttempt.name&lt;/code&gt; indeed has the value &lt;code&gt;"Steelix"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Thus, the newly created this is used, rather than the previously specified &lt;em&gt;hard-binding&lt;/em&gt; for this. Effectively, &lt;code&gt;new&lt;/code&gt; is able to override &lt;em&gt;hard-binding&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The primary reason for this behaviour is to create a function that essentially ignores the this &lt;em&gt;hard-binding&lt;/em&gt;, and presets some or all of the function’s arguments.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Finally, determining “this”&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We can summarize the rules for determining this from a function call’s &lt;strong&gt;call-site&lt;/strong&gt;, in their order of precedence.&lt;/p&gt;

&lt;p&gt;Here they are :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Is the function called with &lt;code&gt;new&lt;/code&gt; ? If so, this is the newly constructed object &lt;em&gt;(New binding).&lt;/em&gt; Example, &lt;code&gt;var attempt = new catchPokémon("Pidgey");&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is the function called with &lt;code&gt;call&lt;/code&gt; or &lt;code&gt;apply&lt;/code&gt; , even hidden inside a &lt;code&gt;bind&lt;/code&gt; &lt;em&gt;hard-binding&lt;/em&gt;? If so, this is the explicitly specified object (&lt;em&gt;Explicit binding)&lt;/em&gt;. Example, &lt;code&gt;var attempt = catchPokémon.call("Pidgeotto");&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is the function called with a context, otherwise known as an owning or containing object? If so, &lt;code&gt;this&lt;/code&gt; is that context object (&lt;em&gt;Implicit binding)&lt;/em&gt;. Example, &lt;code&gt;var attempt = firstAttempt.catchPokémon("Pidgeot");&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Otherwise, this defaults to the &lt;code&gt;global&lt;/code&gt; object, or &lt;code&gt;undefined&lt;/code&gt; in &lt;code&gt;strict&lt;/code&gt; mode (&lt;em&gt;Default binding).&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Summary&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Determining the this binding for an executing function requires finding the direct &lt;strong&gt;call-site&lt;/strong&gt; of that function.&lt;/p&gt;

&lt;p&gt;Once examined, four rules can be applied to the call site, in this order of precedence.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Called with &lt;code&gt;new&lt;/code&gt;? Use the newly constructed object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Called with &lt;code&gt;call&lt;/code&gt; or &lt;code&gt;apply&lt;/code&gt; or &lt;code&gt;bind&lt;/code&gt;? Use the specified object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Called with a context object owning the call? Use that context object.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Default : &lt;code&gt;undefined&lt;/code&gt; in &lt;code&gt;strict&lt;/code&gt; mode, &lt;code&gt;global&lt;/code&gt; object otherwise.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Credits&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Official documentation: &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You Don’t Know JS: this and Object Prototypes, by Kyle Simpson.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Thanks for reading! ❤️
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/anmshpndy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buymeacoffee.com%2Fbuttons%2Fv2%2Fdefault-red.png" alt="Buy Me A Coffee" width="545" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
