<?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: Anik Dash Akash</title>
    <description>The latest articles on Forem by Anik Dash Akash (@anikakash).</description>
    <link>https://forem.com/anikakash</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%2F1358832%2F99356d2c-b7af-47db-929a-4308e2a3136c.png</url>
      <title>Forem: Anik Dash Akash</title>
      <link>https://forem.com/anikakash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/anikakash"/>
    <language>en</language>
    <item>
      <title>🔍 Learning TanStack Query — But First, Manual Caching</title>
      <dc:creator>Anik Dash Akash</dc:creator>
      <pubDate>Sun, 01 Jun 2025 17:43:09 +0000</pubDate>
      <link>https://forem.com/anikakash/learning-tanstack-query-but-first-manual-caching-3k01</link>
      <guid>https://forem.com/anikakash/learning-tanstack-query-but-first-manual-caching-3k01</guid>
      <description>&lt;p&gt;Lately, I’ve been diving into &lt;strong&gt;TanStack Query&lt;/strong&gt; (formerly React Query) to learn more about its powerful data fetching and caching features. But before I start relying on tools that abstract everything for me, I wanted to &lt;strong&gt;understand the problem caching solves&lt;/strong&gt; and &lt;strong&gt;implement a basic version myself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This post walks through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The problem I noticed in my app&lt;/li&gt;
&lt;li&gt;How I came up with the idea of caching&lt;/li&gt;
&lt;li&gt;How I built a simple in-memory cache&lt;/li&gt;
&lt;li&gt;What I learned from the process&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 The Problem That Sparked the Idea
&lt;/h2&gt;

&lt;p&gt;In one of my projects, I display a paginated list of users. Every time I changed the page, an API call was made—even if I had already fetched that page before. This felt inefficient.&lt;/p&gt;

&lt;p&gt;Then I thought:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Why not store the results of each API call in memory, and reuse them if the same request is made again within a short time?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's when I got the idea of building a &lt;strong&gt;simple in-memory cache&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
✅ If I’ve already fetched page 2, don’t fetch it again within 5 minutes.&lt;br&gt;&lt;br&gt;
❌ Otherwise, fetch it from the API and cache it.&lt;/p&gt;

&lt;p&gt;This idea led me to implement manual caching logic in my React hook.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔄 First, The Hook Without Caching
&lt;/h2&gt;

&lt;p&gt;Initially, my custom hook looked like this:&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="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useGetAllUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pageSize&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="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="nx"&gt;setUsers&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;totalUsers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTotalUsers&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="kd"&gt;const&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="nx"&gt;setLoading&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;true&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;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setError&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;null&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;fetchUsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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;setLoading&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="nf"&gt;setError&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="k"&gt;try&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="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users&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;_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pageSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="nf"&gt;setUsers&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;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setTotalUsers&lt;/span&gt;&lt;span class="p"&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;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&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-total-count&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="nf"&gt;setError&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;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;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setLoading&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="p"&gt;};&lt;/span&gt;

    &lt;span class="nf"&gt;fetchUsers&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;currentPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pageSize&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;users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;totalUsers&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="nx"&gt;error&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;It worked—but made &lt;strong&gt;unnecessary API calls&lt;/strong&gt; whenever a user switched between pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Adding Manual Caching (In-Memory)
&lt;/h2&gt;

&lt;p&gt;To fix this, I added a simple cache:&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;const&lt;/span&gt; &lt;span class="nx"&gt;userCache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt; &lt;span class="c1"&gt;// A JS object to store cached results&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;CACHE_DURATION&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;60&lt;/span&gt; &lt;span class="o"&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;// Cache is valid for 5 minutes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I modified the hook to check the cache before calling the API:&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="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useGetAllUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pageSize&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="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="nx"&gt;setUsers&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;totalUsers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTotalUsers&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="kd"&gt;const&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="nx"&gt;setLoading&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;true&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;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setError&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;null&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;cacheKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`page_&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;_limit_&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;pageSize&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="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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cached&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;userCache&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;cacheKey&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;cached&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&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;cached&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;CACHE_DURATION&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Serve from cache&lt;/span&gt;
      &lt;span class="nf"&gt;setUsers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&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="nf"&gt;setTotalUsers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cached&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="nf"&gt;setLoading&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="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="c1"&gt;// Fetch from API and store in cache&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchUsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &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;setLoading&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="nf"&gt;setError&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="k"&gt;try&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="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users&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;_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;_limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pageSize&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="nx"&gt;res&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;total&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;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&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-total-count&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

        &lt;span class="nf"&gt;setUsers&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="nf"&gt;setTotalUsers&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="nx"&gt;userCache&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;cacheKey&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;data&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="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&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="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="nf"&gt;setError&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;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;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setLoading&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="p"&gt;};&lt;/span&gt;

    &lt;span class="nf"&gt;fetchUsers&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;currentPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pageSize&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;users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;totalUsers&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="nx"&gt;error&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;h2&gt;
  
  
  🧩 How It Works – Step by Step
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generate a unique key&lt;/strong&gt; (page_2_limit_10) based on the page and page size.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Check the cache:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the key exists and the data is fresh (within 5 minutes), use it directly.&lt;/li&gt;
&lt;li&gt;If not, fetch new data from the API.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Update the cache&lt;/strong&gt; with new data and a timestamp.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Avoid repeated fetches&lt;/strong&gt; for already-viewed pages within a short time.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This was the “aha!” moment for me—simple caching reduced redundant network calls and made the app feel snappier.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Example Usage in Component
&lt;/h2&gt;

&lt;p&gt;Here’s how I use the hook in the UI:&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;const&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="nx"&gt;totalUsers&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="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useGetAllUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;currentPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pageSize&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;lt;&amp;gt;&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;SkeletonLoader&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;UserGrid&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="o"&gt;=&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="sr"&gt;/&lt;/span&gt;&lt;span class="err"&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;Pagination&lt;/span&gt;
      &lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;currentPage&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="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;totalUsers&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nx"&gt;pageSize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;pageSize&lt;/span&gt;&lt;span class="p"&gt;}&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;page&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;setCurrentPage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&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="o"&gt;&amp;lt;&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;p&gt;This is clean and declarative—the hook handles everything behind the scenes.&lt;/p&gt;

&lt;h2&gt;
  
  
  📘 What I Learned
&lt;/h2&gt;

&lt;p&gt;From this experience, I understood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;How to think like a caching system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How to build basic memoization logic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;trade-offs of manual caching&lt;/strong&gt; (like global memory usage and no auto-invalidations)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most importantly, I &lt;strong&gt;understood why TanStack Query exists&lt;/strong&gt;—it handles all this, and much more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automatic stale handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Background refetching&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DevTools for cache inspection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Garbage collection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React integration&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>caching</category>
      <category>tanstackquery</category>
    </item>
    <item>
      <title>Conventional Git Commits With Best Practices.</title>
      <dc:creator>Anik Dash Akash</dc:creator>
      <pubDate>Wed, 11 Dec 2024 12:33:45 +0000</pubDate>
      <link>https://forem.com/anikakash/conventional-git-commits-with-best-practices-4d2</link>
      <guid>https://forem.com/anikakash/conventional-git-commits-with-best-practices-4d2</guid>
      <description>&lt;p&gt;This article is not a guide on how to push your code to Git. Instead, it focuses on best practices for writing effective Git commit messages. A Git commit is a critical part of the software development process. Poorly written commit messages can lead to confusion, hinder collaboration, and negatively impact the productivity of a development team.&lt;/p&gt;

&lt;p&gt;Learning to write clear and meaningful commit messages is essential for maintaining a high-quality codebase. In this article, I will explore some of the best practices for creating well-structured commit messages, using the &lt;strong&gt;&lt;a href="https://www.conventionalcommits.org/en/v1.0.0/" rel="noopener noreferrer"&gt;Conventional Commits&lt;/a&gt;&lt;/strong&gt; standard as an example. This standard provides a structured approach to writing commit messages, making them more informative and easier to understand for everyone on the team.&lt;/p&gt;

&lt;p&gt;By following these guidelines, you can improve the readability and maintainability of your project’s history, streamline collaboration, and even simplify automation tasks like versioning and changelog generation. Let's directly dive into the main point. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Basic Convention of a Good Git Commit
&lt;/h2&gt;

&lt;p&gt;A well-structured Git commit message typically follows this format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt; [optional scope] : &lt;span class="nt"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;

[optional body]

[optional footer(s)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Examples of commit types
&lt;/h3&gt;

&lt;p&gt;Commit messages can vary depending on the task you are working on. Here are some common conventions for different scenarios:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;feat :&lt;/code&gt; New Features&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt;  Introduces a new feature or enhancement.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;feat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt; &lt;span class="nx"&gt;functionality&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="nf"&gt;feat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;improve&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;desing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;fix:&lt;/code&gt; &lt;strong&gt;Bug Fixes&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Fixe a bug in the codebase.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="nx"&gt;timeout&lt;/span&gt; &lt;span class="nx"&gt;issue&lt;/span&gt;
&lt;span class="nf"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;correct&lt;/span&gt; &lt;span class="nx"&gt;alignment&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;navbar&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;docs:&lt;/code&gt; &lt;strong&gt;Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: Updates or improvements to documents to documentation (README, code comments, etc.).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;README&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;installation&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt;
&lt;span class="nf"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;missing&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;descriptions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;style:&lt;/code&gt; &lt;strong&gt;Code Styling&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt;  Changes that do not affect functionality (formatting, spacing, linting).
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fix&lt;/span&gt; &lt;span class="nx"&gt;ESLint&lt;/span&gt; &lt;span class="nx"&gt;warnings&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;reformat&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;consistency&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;perf:&lt;/code&gt; &lt;strong&gt;Performance Improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt;  Enhances performance without changing functionality.
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;perf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;optimize&lt;/span&gt; &lt;span class="nx"&gt;database&lt;/span&gt; &lt;span class="nx"&gt;queries&lt;/span&gt;
&lt;span class="nf"&gt;perf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;reduce&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt; &lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;refactor:&lt;/code&gt; &lt;strong&gt;Code Refactoring&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt;  Improves code structure or readability without changing functionality.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;refactor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;simplify&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;validation&lt;/span&gt; &lt;span class="nx"&gt;logic&lt;/span&gt;
&lt;span class="nf"&gt;refactor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;split&lt;/span&gt; &lt;span class="nx"&gt;large&lt;/span&gt; &lt;span class="nx"&gt;functions&lt;/span&gt; &lt;span class="nx"&gt;into&lt;/span&gt; &lt;span class="nx"&gt;smaller&lt;/span&gt; &lt;span class="nx"&gt;ones&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;test:&lt;/code&gt; &lt;strong&gt;Tests&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Adds or updates test cases.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;unit&lt;/span&gt; &lt;span class="nx"&gt;tests&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt; &lt;span class="nx"&gt;service&lt;/span&gt;
&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;integration&lt;/span&gt; &lt;span class="nx"&gt;tests&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;payment&lt;/span&gt; &lt;span class="nx"&gt;gateway&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;chore:&lt;/code&gt; &lt;strong&gt;Maintenance&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: Miscellaneous tasks like dependency updates or  build changes.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;chore&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;dependencies&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;latest&lt;/span&gt; &lt;span class="nx"&gt;versions&lt;/span&gt;
&lt;span class="nf"&gt;chore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;configure&lt;/span&gt; &lt;span class="nx"&gt;GitHub&lt;/span&gt; &lt;span class="nx"&gt;Actions&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;CI&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;CD&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;build:&lt;/code&gt; &lt;strong&gt;Build Changes&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: Changes to the build system or external dependencies.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;upgrade&lt;/span&gt; &lt;span class="nx"&gt;webpack&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;v5&lt;/span&gt;
&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;Babel&lt;/span&gt; &lt;span class="nx"&gt;support&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;modern&lt;/span&gt; &lt;span class="nx"&gt;JS&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;ci:&lt;/code&gt; &lt;strong&gt;Continuous Integration&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Updates related to CI/CD pipelines or automation scripts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fix&lt;/span&gt; &lt;span class="nx"&gt;Dockerfile&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;deployment&lt;/span&gt;
&lt;span class="nx"&gt;ci&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;GitHub&lt;/span&gt; &lt;span class="nx"&gt;Actions&lt;/span&gt; &lt;span class="nx"&gt;workflow&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;revert:&lt;/code&gt; Reverts&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; Reverts a previous commit.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt; &lt;span class="nx"&gt;revert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;revert&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;feat(auth): add login functionality&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;BREAKING CHANGE :&lt;/code&gt; &lt;strong&gt;Breaking API/Functionality&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A commit introducing a breaking change in the codebase.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Usage:&lt;/strong&gt; Add &lt;code&gt;!&lt;/code&gt; to the type or include &lt;code&gt;BREAKING CHANGE&lt;/code&gt; **** in the footer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;feat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&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;rename&lt;/span&gt; &lt;span class="s2"&gt;`getUser`&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="s2"&gt;`fetchUser`&lt;/span&gt;

&lt;span class="nx"&gt;BREAKING&lt;/span&gt; &lt;span class="nx"&gt;CHANGE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`getUser`&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;replaced&lt;/span&gt; &lt;span class="nx"&gt;by&lt;/span&gt; &lt;span class="s2"&gt;`fetchUser`&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;improve&lt;/span&gt; &lt;span class="nx"&gt;naming&lt;/span&gt; &lt;span class="nx"&gt;consistency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  Combination commit messages
&lt;/h3&gt;

&lt;p&gt;In some cases, you may combine multiple changes into one messages:&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="nf"&gt;feat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;forgot&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="nx"&gt;feature&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt; &lt;span class="nx"&gt;API&lt;/span&gt;
&lt;span class="nf"&gt;fix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="nx"&gt;expiration&lt;/span&gt; &lt;span class="nx"&gt;issue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Multiline commit messages:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Method 1:&lt;/strong&gt; Inline with the -m Option&lt;/p&gt;

&lt;p&gt;You can provide multiple -m flags to add different lines to your commit message. For example:&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;git&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;feat(auth): add forgot password feature&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Added email verification for password resets.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Updated login API with enhanced security measures.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach is quick but not ideal for detailed or formatted commit messages since it can get cumbersome for longer descriptions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method 2:&lt;/strong&gt; Use a Text Editor for the commit message&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start the commit without a message:
Run the &lt;code&gt;git commit&lt;/code&gt; command without the &lt;code&gt;-m&lt;/code&gt; flag:
&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="nx"&gt;git&lt;/span&gt; &lt;span class="nx"&gt;commit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Edit the commit message in Your default text editor:
Your default text editor (like &lt;code&gt;vim&lt;/code&gt;, &lt;code&gt;nano&lt;/code&gt; or another configured editor) will open, allowing you to write a detailed, multiline commit message.
Example in the editor:
&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="nf"&gt;feat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;forgot&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="nx"&gt;feature&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Added&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="nx"&gt;verification&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="nx"&gt;resets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;Updated&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt; &lt;span class="nx"&gt;API&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;enhanced&lt;/span&gt; &lt;span class="nx"&gt;security&lt;/span&gt; &lt;span class="nx"&gt;measures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Save and close the editor:&lt;/strong&gt;&lt;br&gt;
After writing the message, save the file and close the editor. The commit will be created with your multiline message.&lt;/p&gt;

&lt;h3&gt;
  
  
  how to save and exit when writing a commit message in &lt;code&gt;vim&lt;/code&gt; or &lt;code&gt;nano&lt;/code&gt;:
&lt;/h3&gt;

&lt;p&gt;Here’s how to save and exit when writing a commit message in vim or nano:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In vim :&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write your commit message:
Type the commit message as needed in the editor.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save and exit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Esc&lt;/code&gt; to exit insert mode.&lt;/li&gt;
&lt;li&gt;Type : &lt;code&gt;wq&lt;/code&gt; (short for "write and quit") and press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;This saves the file and exits &lt;code&gt;vim&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alternative commands:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;To save without exiting, type &lt;code&gt;:w&lt;/code&gt; and press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To exit without saving, type &lt;code&gt;:q!&lt;/code&gt; and press &lt;code&gt;Enter&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In nano&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Write Your commit Message:&lt;br&gt;
Type the commit message directly into the editor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Save and exit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + O&lt;/code&gt; (Write Out) to save the file.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Enter&lt;/code&gt; to confirm the filename (usually pre-filled).&lt;/li&gt;
&lt;li&gt;Then press &lt;code&gt;Ctrl + X&lt;/code&gt; to exit &lt;code&gt;nano&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cancel without saving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + X&lt;/code&gt; and when prompted to save changes, type &lt;code&gt;N&lt;/code&gt; for "No."&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tips for writing effective commit messages
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use Imperative Tone (Present Tense) :&lt;/strong&gt; 

&lt;ol&gt;
&lt;li&gt;Good: &lt;code&gt;fix:&lt;/code&gt; &lt;code&gt;resolve issue with pagination.&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Bad: &lt;code&gt;fixed issues with pagination.&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Be Specific:&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;Good: &lt;code&gt;feat(ui):&lt;/code&gt;  &lt;code&gt;add tooltip to icons.&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Bad: &lt;code&gt;feat: update UI&lt;/code&gt; &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Keep It Short:&lt;/strong&gt; Aim for under 50 characters in the header.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Best Wishes. &lt;br&gt;
you can find me on Github : &lt;a href="https://github.com/anikakash" rel="noopener noreferrer"&gt;anikakash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>commit</category>
      <category>softwareengineering</category>
      <category>developer</category>
    </item>
    <item>
      <title>Interview Question on JS Variable</title>
      <dc:creator>Anik Dash Akash</dc:creator>
      <pubDate>Tue, 05 Nov 2024 10:00:29 +0000</pubDate>
      <link>https://forem.com/anikakash/interview-question-on-js-variable-j9d</link>
      <guid>https://forem.com/anikakash/interview-question-on-js-variable-j9d</guid>
      <description>&lt;h2&gt;
  
  
  1. Basic Definitions &amp;amp; Differences :
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;What are &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, and &lt;code&gt;var&lt;/code&gt;, and how do they differ?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;var&lt;/code&gt; was the original way to declare variables in JavaScript. It has function-level scope and is prone to hoisting issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; were introduced in ES6 (ES2015) and have block-level scope, making them more predictable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;let&lt;/code&gt; allows you to declare a variable that can be reassigned, whereas &lt;code&gt;const&lt;/code&gt; creates a constant reference.&lt;br&gt;
&lt;/p&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;var&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;10&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="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="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="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Q: &lt;strong&gt;When should you use &lt;code&gt;let&lt;/code&gt; vs &lt;code&gt;const&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use const by default. Only use let if you know the variable needs to be reassigned later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This improves code readability and prevents accidental reassignments.&lt;br&gt;
&lt;/p&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;apiUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Won't change&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;userScore&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;// Will change as the user scores points&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Q: &lt;strong&gt;Why is &lt;code&gt;var&lt;/code&gt; generally discouraged in modern JavaScript?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; has function-level scope and gets hoisted, which can cause unexpected behavior and bugs. &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; are block-scoped and reduce these issues.
&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;example&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="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;var&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;// Accessible outside the if block&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;// 10&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;exampleLet&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="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;let&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;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Block-scoped&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;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Scope and Hoisting :
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;Explain the concept of scope in JavaScript (global, function, block).&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Global Scope&lt;/strong&gt;: Variables declared outside functions are globally accessible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Function Scope&lt;/strong&gt;: Variables declared inside a function with var are function-scoped.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Block Scope&lt;/strong&gt;: Variables declared inside a block (e.g., {}) with let or const are block-scoped.&lt;br&gt;
&lt;/p&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;var&lt;/span&gt; &lt;span class="nx"&gt;globalVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I am global&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;testScope&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;functionVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I am function-scoped&lt;/span&gt;&lt;span class="dl"&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="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;let&lt;/span&gt; &lt;span class="nx"&gt;blockVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;I am block-scoped&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;blockVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Works fine&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;blockVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Q: &lt;strong&gt;How does scope differ between &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, and &lt;code&gt;const&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; has function scope; &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; have block scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;What is hoisting, and how does it affect &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, and &lt;code&gt;const&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hoisting is JavaScript's behavior of "moving" variable and function declarations to the top of their scope. Only &lt;code&gt;var&lt;/code&gt; is hoisted and initialized with &lt;code&gt;undefined&lt;/code&gt;. &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; are hoisted but not initialized, leading to the Temporal Dead Zone (TDZ).
&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;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined due to hoisting&lt;/span&gt;
&lt;span class="kd"&gt;var&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;10&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;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError due to TDZ&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;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Temporal Dead Zone (TDZ):
&lt;/h2&gt;

&lt;p&gt;What is the Temporal Dead Zone (TDZ)?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TDZ is the period between entering the scope and initializing &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; variables. Accessing them before declaration results in a &lt;code&gt;ReferenceError&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;How does the TDZ affect the behavior of &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They cannot be used until declared within their scope, preventing undefined or accidental accesses.
&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;myVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError due to TDZ&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;myVar&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Q: &lt;strong&gt;What happens if you try to access a let or const variable before it’s declared?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It throws a &lt;code&gt;ReferenceError&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Re-declaration and Re-assignment
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;Can you re-declare a variable declared with &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, or &lt;code&gt;var&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; allows re-declaration; let and const do not within the same scope.
&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;var&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;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="c1"&gt;// No error&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// let y = 2; // SyntaxError: Identifier 'y' has already been declared&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Q: &lt;strong&gt;What’s the difference between re-declaration and re-assignment in JavaScript?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Re-declaration&lt;/strong&gt;: Declaring a variable again within the same scope.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Re-assignment&lt;/strong&gt;: Changing the value of an existing variable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;Can a const variable be re-assigned or mutated?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;const&lt;/code&gt; variable cannot be re-assigned. However, objects and arrays declared with &lt;code&gt;const&lt;/code&gt; can be mutated.
&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Allowed (mutating the object)&lt;/span&gt;
&lt;span class="c1"&gt;// obj = { name: 'Charlie' }; // TypeError: Assignment to constant variable&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Practical Scenarios &amp;amp; Edge Cases
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;What happens when &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, and &lt;code&gt;const&lt;/code&gt; variables are declared without an initial value?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; is initialized to &lt;code&gt;undefined&lt;/code&gt;; &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; are uninitialized.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;How does block scoping with &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; work within loops?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; are block-scoped, so each loop iteration can have a new binding.
&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;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="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="c1"&gt;// Outputs 0, 1, 2&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;j&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;j&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;j&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;j&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;// Outputs 3, 3, 3}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Q: &lt;strong&gt;What issues might arise if you use &lt;code&gt;var&lt;/code&gt; in loops with asynchronous operations (like &lt;code&gt;setTimeout&lt;/code&gt;)?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;var&lt;/code&gt; in loops with asynchronous operations causes unexpected results due to lack of block scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Real-World Usage Questions
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;Which keyword (&lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, or &lt;code&gt;var&lt;/code&gt;) would you use for defining variables in a loop, and why?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prefer &lt;code&gt;let&lt;/code&gt; for variables that may change in each iteration to avoid scoping issues with &lt;code&gt;var&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;It clarifies intent by ensuring values won’t change, making the code easier to follow.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It prevents re-assignment and maintains function immutability.
&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;greet&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="s1"&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;p&gt;Q: &lt;strong&gt;How can const improve code readability and maintainability?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It clarifies intent by ensuring values won’t change, making the code easier to follow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Behavioral Questions and Scenarios
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;These focus on your understanding of var, let, and const and their behaviors in different contexts.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Q: &lt;strong&gt;What is the output of the following code, and why?&lt;/strong&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="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;// ?&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="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;Answer:&lt;/strong&gt; undefined because &lt;code&gt;var&lt;/code&gt; is hoisted and initialized with &lt;code&gt;undefined&lt;/code&gt;. The declaration is moved to the top, but the assignment &lt;code&gt;(x = 10)&lt;/code&gt; occurs in its original place.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;What about this code?&lt;/strong&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="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;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ?&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="mi"&gt;20&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;Answer:&lt;/strong&gt; &lt;code&gt;ReferenceError&lt;/code&gt; because &lt;code&gt;let&lt;/code&gt; is hoisted but not initialized, leading to a Temporal Dead Zone (TDZ) until it is assigned a value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;What happens if you declare a variable with const but don’t initialize it immediately?&lt;/strong&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;const&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;// ?&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; SyntaxError. &lt;code&gt;const&lt;/code&gt; must be initialized at the time of declaration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8 Scope and Hoisting
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Questions about scope test your understanding of how var, let, and const variables are accessible within functions, blocks, and globally.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Q: What will be logged to the console?&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;scopeTest&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;a&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;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;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;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;c&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="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="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="nx"&gt;b&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="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&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;a&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="nx"&gt;b&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="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ?&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;scopeTest&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;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Inside the &lt;code&gt;if&lt;/code&gt; block:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;console.log(a)&lt;/code&gt; logs &lt;code&gt;1&lt;/code&gt; because &lt;code&gt;a&lt;/code&gt; is declared in the function scope and accessible within the block.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;console.log(b)&lt;/code&gt; logs &lt;code&gt;2&lt;/code&gt; because &lt;code&gt;b&lt;/code&gt; is &lt;code&gt;let&lt;/code&gt;-declared within the block.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;console.log(c)&lt;/code&gt; logs &lt;code&gt;3&lt;/code&gt; because &lt;code&gt;c&lt;/code&gt; is &lt;code&gt;const&lt;/code&gt;-declared within the block.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Outside the &lt;code&gt;if&lt;/code&gt; block:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;console.log(a)&lt;/code&gt; logs &lt;code&gt;1&lt;/code&gt; because &lt;code&gt;a&lt;/code&gt; is function-scoped.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;console.log(b)&lt;/code&gt; and &lt;code&gt;console.log(c)&lt;/code&gt; throw &lt;code&gt;ReferenceError&lt;/code&gt;s because &lt;code&gt;b&lt;/code&gt; and &lt;code&gt;c&lt;/code&gt; are block-scoped.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;How does the following code behave?&lt;/strong&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; Logs &lt;code&gt;3&lt;/code&gt; three times. Since &lt;code&gt;var&lt;/code&gt; is function-scoped, each &lt;code&gt;setTimeout&lt;/code&gt; refers to the same &lt;code&gt;i&lt;/code&gt; variable, which has become &lt;code&gt;3&lt;/code&gt; after the loop ends.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9 Re-assignment and Mutation
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Questions related to re-assigning const and mutating objects or arrays help assess your understanding of immutability and value vs. reference.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Q: &lt;strong&gt;Can you re-assign a &lt;code&gt;const&lt;/code&gt; variable? Why or why not?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; No, re-assigning a const variable results in a TypeError. const variables cannot be re-assigned but can be mutated if they hold objects or arrays.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;What will happen in the following code?&lt;/strong&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;const&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="nx"&gt;person&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="s1"&gt;Bob&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;person&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;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; &lt;code&gt;{ name: 'Bob' }&lt;/code&gt; because &lt;code&gt;person&lt;/code&gt; is a reference to an object. &lt;code&gt;const&lt;/code&gt; prevents re-assignment, not mutation of properties in the object.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10 Common Mistakes &amp;amp; Debugging
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;These questions test your understanding of variable declarations and common mistakes.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Q: &lt;strong&gt;Why does this code throw an error, and how would you fix it?&lt;/strong&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;function&lt;/span&gt; &lt;span class="nf"&gt;check&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;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&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="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="nf"&gt;check&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Answer: The code throws a ReferenceError due to the Temporal Dead Zone. To fix it, move the declaration &lt;code&gt;let a = 10;&lt;/code&gt; above &lt;code&gt;console.log(a);&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  11 Practical Usage Scenarios
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;These questions test your ability to apply let, const, and var in real-world scenarios.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Q: &lt;strong&gt;When would you use let vs. const in a function or a loop?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; Use &lt;code&gt;const&lt;/code&gt; for values that don’t need to change and &lt;code&gt;let&lt;/code&gt; for values that will change (e.g., loop counters or mutable values).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: Explain the output of this 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;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="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="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="nx"&gt;arr&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="o"&gt;=&amp;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="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="nf"&gt;map&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="c1"&gt;// ?&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; &lt;code&gt;[0, 1, 2]&lt;/code&gt;. Each &lt;code&gt;push&lt;/code&gt; creates a new &lt;code&gt;i&lt;/code&gt; in the block scope of &lt;code&gt;let&lt;/code&gt;, so each function holds the correct i value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  12 Edge Cases and Special Scenarios
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;These focus on unusual or complex cases involving variables.&lt;/code&gt;&lt;br&gt;
Q: &lt;strong&gt;What happens if you declare a var variable twice in the same scope?&lt;/strong&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="nx"&gt;x&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="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="mi"&gt;10&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;// ?&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; &lt;code&gt;10&lt;/code&gt;. &lt;code&gt;var&lt;/code&gt; allows re-declaration, so the last assignment takes effect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: Explain why this code causes an error:&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="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;myVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ?&lt;/span&gt;
   &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;myVar&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="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; ReferenceError due to the Temporal Dead Zone. The variable myVar exists but cannot be accessed until its initialization line.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  13 Shadowing
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;What is variable shadowing, and how does it affect variable access?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shadowing occurs when a variable declared within a certain scope (like a block or function) has the same name as a variable in an outer scope. The inner variable "shadows" the outer one, making the outer variable inaccessible in that scope.
&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;outer&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;shadowExample&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inner&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="c1"&gt;// 'inner'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;shadowExample&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;// 'outer'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Q: &lt;strong&gt;Can you shadow a var variable with a let or const&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes, &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; can shadow a &lt;code&gt;var&lt;/code&gt; in a nested block.
&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;var&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="s1"&gt;outer&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;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="s1"&gt;inner&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;a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 'inner'&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="c1"&gt;// 'outer'&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  14 Closures and Variable Capture
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;How do closures interact with variables declared with var, let, and const?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Closures capture the &lt;strong&gt;reference&lt;/strong&gt; of variables, not the value. For example, using &lt;code&gt;let&lt;/code&gt; in a loop with closures captures each iteration’s distinct value, whereas &lt;code&gt;var&lt;/code&gt; captures only one value for the entire loop.
&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;closureTest&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;funcs&lt;/span&gt; &lt;span class="o"&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;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="nx"&gt;funcs&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="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="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;funcs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;closureTest&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="c1"&gt;// Logs 0, 1, 2&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;closureVarTest&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;funcs&lt;/span&gt; &lt;span class="o"&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="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="nx"&gt;funcs&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="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="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;funcs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;closureVarTest&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="c1"&gt;// Logs 3, 3, 3&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this code, we are using closures within a loop to see how &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;var&lt;/code&gt; handle variable scope. Let’s walk through each case to understand the different outputs.&lt;br&gt;
&lt;strong&gt;&lt;code&gt;let&lt;/code&gt; Case: &lt;code&gt;closureTest&lt;/code&gt;&lt;/strong&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;function&lt;/span&gt; &lt;span class="nf"&gt;closureTest&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;funcs&lt;/span&gt; &lt;span class="o"&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;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="nx"&gt;funcs&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="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="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;funcs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;closureTest&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="c1"&gt;// Logs 0, 1, 2&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Loop Scope with &lt;code&gt;let&lt;/code&gt;:&lt;/strong&gt; In this loop, &lt;code&gt;i&lt;/code&gt; is declared using &lt;code&gt;let&lt;/code&gt;, which is block-scoped. This means that each iteration of the loop creates a new instance of &lt;code&gt;i&lt;/code&gt; with a unique value within that block.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Closures and &lt;code&gt;let&lt;/code&gt;:&lt;/strong&gt; When &lt;code&gt;funcs.push(() =&amp;gt; console.log(i))&lt;/code&gt; runs, each function captures the current instance of &lt;code&gt;i&lt;/code&gt; as a closure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the first iteration, &lt;code&gt;i = 0&lt;/code&gt;, so the function captures &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the second iteration, &lt;code&gt;i = 1&lt;/code&gt;, so the function captures &lt;code&gt;1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the third iteration, &lt;code&gt;i = 2&lt;/code&gt;, so the function captures &lt;code&gt;2&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; Each function, when called, has a distinct value for &lt;code&gt;i&lt;/code&gt; (&lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, and &lt;code&gt;2&lt;/code&gt;). Therefore, the output is &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, and &lt;code&gt;2&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;var&lt;/code&gt; Case: &lt;code&gt;closureVarTest&lt;/code&gt;&lt;/strong&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;function&lt;/span&gt; &lt;span class="nf"&gt;closureVarTest&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;funcs&lt;/span&gt; &lt;span class="o"&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="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="nx"&gt;funcs&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="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="p"&gt;}&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;funcs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;closureVarTest&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="c1"&gt;// Logs 3, 3, 3&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Function Scope with &lt;code&gt;var&lt;/code&gt;:&lt;/strong&gt; When &lt;code&gt;var&lt;/code&gt; is used to declare &lt;code&gt;i&lt;/code&gt;, it is function-scoped rather than block-scoped. This means there is only one &lt;code&gt;i&lt;/code&gt; shared across all iterations of the loop.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Closures and &lt;code&gt;var&lt;/code&gt;:&lt;/strong&gt; Each time &lt;code&gt;funcs.push(() =&amp;gt; console.log(i))&lt;/code&gt; is executed, the function captures the reference to the same &lt;code&gt;i&lt;/code&gt; variable.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After the loop completes, &lt;code&gt;i&lt;/code&gt; has been incremented to &lt;code&gt;3&lt;/code&gt; (the loop ends when &lt;code&gt;i &amp;lt; 3&lt;/code&gt; fails, so &lt;code&gt;i&lt;/code&gt; becomes &lt;code&gt;3&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt; Since each function in &lt;code&gt;funcs&lt;/code&gt; holds a reference to the same &lt;code&gt;i&lt;/code&gt; variable (now holding the value &lt;code&gt;3&lt;/code&gt;), each function logs &lt;code&gt;3&lt;/code&gt; when called. Therefore, the output is &lt;code&gt;3, 3, 3&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Difference&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt; creates a new binding of &lt;code&gt;i&lt;/code&gt; for each iteration due to block scoping, allowing each function to capture a unique value of &lt;code&gt;i&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; only has one binding of &lt;code&gt;i&lt;/code&gt; in the entire function scope, so all functions capture the same reference, which ends up being &lt;code&gt;3&lt;/code&gt; after the loop completes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;To Summarize&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;let&lt;/code&gt; in the loop gives each iteration its own scoped variable, capturing the current value of &lt;code&gt;i&lt;/code&gt; in each closure.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;var&lt;/code&gt; in the loop results in all closures referencing the same variable, which has the final value after the loop (&lt;code&gt;3&lt;/code&gt; in this case).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  15 Destructuring with &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;Can you use destructuring with let and const?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes. This is a common pattern, especially for working with arrays and objects. Destructuring with const works only when you don’t plan to reassign the variables.
&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="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;=&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;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, 2&lt;/span&gt;

&lt;span class="kd"&gt;let&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="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;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="c1"&gt;// 10, 20&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  16 Temporal Dead Zone Edge Cases
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;How does the TDZ apply to function arguments and default parameters?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The TDZ applies to any &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; variable, even when default parameter values reference other parameters.
&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;testTDZ&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="nx"&gt;b&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="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="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// testTDZ(); // ReferenceError because `b` is not defined when `a` is assigned&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  17 Global Variables and Global Scope Pollution
&lt;/h2&gt;

&lt;p&gt;Q: What happens if you declare a variable without &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, or &lt;code&gt;var&lt;/code&gt;?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Declaring a variable without &lt;code&gt;let&lt;/code&gt;, &lt;code&gt;const&lt;/code&gt;, or &lt;code&gt;var&lt;/code&gt; automatically places it in the global scope (in non-strict mode), which can lead to unintended side effects.
&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;globalExample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nx"&gt;someVar&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;// Creates a global variable if in non-strict mode&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;globalExample&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;someVar&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;h2&gt;
  
  
  18 Best Practices Questions
&lt;/h2&gt;

&lt;p&gt;Q: Why is it generally best practice to avoid using &lt;code&gt;var&lt;/code&gt; in modern JavaScript code?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; is generally safer because they are block-scoped and prevent unexpected issues with hoisting and re-declaration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Q: &lt;strong&gt;Why is &lt;code&gt;const&lt;/code&gt; considered more readable and reliable for defining functions?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;const&lt;/code&gt; ensures the function cannot be reassigned, which makes the code more predictable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  19 Advanced Temporal Dead Zone Questions
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;Does the TDZ apply only within functions, or does it also apply to global and block scope?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The TDZ applies to any block, function, or global scope where &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; are declared. This means even globally declared variables are within the TDZ until they are initialized.
&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="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;temp&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;temp&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  20  Default Parameters and const in Functions
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;Can you use const within function parameters or with default values?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes, you can define function parameters with default values, but &lt;code&gt;const&lt;/code&gt; cannot be used directly within the parameter list.
&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;sum&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;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;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;h2&gt;
  
  
  21 Combining let and const with Conditional Statements
&lt;/h2&gt;

&lt;p&gt;Q: &lt;strong&gt;What is the behavior of let and const declarations within if or try-catch blocks?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; are block-scoped, so they exist only within the block, even in &lt;code&gt;if&lt;/code&gt; and &lt;code&gt;try-catch&lt;/code&gt; statements.
&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;let&lt;/span&gt; &lt;span class="nx"&gt;blockVar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inside if&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;blockVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 'inside 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="nx"&gt;blockVar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you can follow me on &lt;a href="https://github.com/anikakash" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding State and Props in React 💻🌱</title>
      <dc:creator>Anik Dash Akash</dc:creator>
      <pubDate>Mon, 23 Sep 2024 00:32:23 +0000</pubDate>
      <link>https://forem.com/anikakash/understanding-state-and-props-in-react-5b9j</link>
      <guid>https://forem.com/anikakash/understanding-state-and-props-in-react-5b9j</guid>
      <description>&lt;p&gt;React is a powerful JavaScript library for building user interfaces. Two core concepts that every React developer should understand are &lt;strong&gt;state&lt;/strong&gt; and &lt;strong&gt;props&lt;/strong&gt;. In this blog, we'll break down these concepts, show how to use them, and illustrate them with code examples. 🌱&lt;/p&gt;

&lt;h2&gt;
  
  
  What is State? 🤔
&lt;/h2&gt;

&lt;p&gt;In React, &lt;strong&gt;state&lt;/strong&gt; is a built-in object that stores property values that belong to a component. It is managed &lt;em&gt;within&lt;/em&gt; the component and can change over time. State allows React components to respond to user input and render dynamic data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Managing State in a Counter Component
&lt;/h3&gt;

&lt;p&gt;Let's create a simple counter component that increments the count when a button is clicked.&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&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="s1"&gt;react&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;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Declare a state variable 'count' and a function 'setCount' to update the state&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;setCount&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="nt"&gt;div&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="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&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;h1&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="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;setCount&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="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increment&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;&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="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="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explanation:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;useState(0) initializes the count state to 0.&lt;/li&gt;
&lt;li&gt;setCount(count + 1) updates the count when the button is clicked.&lt;/li&gt;
&lt;li&gt;React re-renders the component to display the updated count.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Output:
&lt;/h2&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%2F6zcxhrznon37let67r0e.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%2F6zcxhrznon37let67r0e.png" alt="React State" width="230" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you click the button, the count increases by 1 each time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Props? 🛠️
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Props *&lt;/em&gt;(short for properties) allow you to pass data from a parent component to a child component. Props are read-only and cannot be modified by the child component—they’re used for rendering dynamic data passed from one component to another.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Passing Props to a Child Component
&lt;/h3&gt;

&lt;p&gt;Let’s create a &lt;code&gt;component&lt;/code&gt; that takes a &lt;code&gt;name&lt;/code&gt;prop and displays a greeting message.&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&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;Greeting&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hello, &lt;span class="si"&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;name&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;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="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;(&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Greeting&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Anik"&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;Greeting&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"React Developer"&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="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="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="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explanation:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;Greeting&lt;/code&gt; component accepts &lt;code&gt;props&lt;/code&gt; as an argument.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;{props.name}&lt;/code&gt; dynamically renders the &lt;code&gt;name&lt;/code&gt; passed from the parent component.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;App&lt;/code&gt; component passes different names to the &lt;code&gt;Greeting&lt;/code&gt; component.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Output:
&lt;/h2&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%2Fdela8xmxp8gvm0yna8br.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%2Fdela8xmxp8gvm0yna8br.png" alt="react props " width="422" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Differences Between State and Props 📋
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Props&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mutability&lt;/td&gt;
&lt;td&gt;Can be changed with &lt;code&gt;setState&lt;/code&gt; or &lt;code&gt;useState&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Immutable (read-only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Local to the component (managed inside)&lt;/td&gt;
&lt;td&gt;Passed from parent to child&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage&lt;/td&gt;
&lt;td&gt;Handles dynamic, interactive data&lt;/td&gt;
&lt;td&gt;Passes data and configurations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  State and Props Together 🔗
&lt;/h2&gt;

&lt;p&gt;Often, you'll use &lt;strong&gt;state&lt;/strong&gt; in the parent component and pass its value down as &lt;strong&gt;props&lt;/strong&gt; to the child component. Let’s see how they work together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Updating State and Passing it as Props
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&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="s1"&gt;react&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;DisplayCounter&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Current Count: &lt;span class="si"&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;count&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;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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Counter&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;setCount&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="nt"&gt;div&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;DisplayCounter&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&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="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;setCount&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="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Increment&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;&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="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="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explanation:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;count is managed as a state in the Counter component.&lt;/li&gt;
&lt;li&gt;The DisplayCounter component receives count as a prop and displays it.&lt;/li&gt;
&lt;li&gt;When the button is clicked, the count state is updated, and the new value is passed down to DisplayCounter as a prop.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Output:
&lt;/h2&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%2Frz4j7wzqutudxet5o0iw.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%2Frz4j7wzqutudxet5o0iw.png" alt="state with props" width="307" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 📝
&lt;/h2&gt;

&lt;p&gt;Understanding &lt;code&gt;state&lt;/code&gt; and &lt;code&gt;props&lt;/code&gt; is crucial for mastering React. State is used for managing data that changes over time, while props allow data to flow between components. By using these two concepts together, you can build interactive and dynamic user interfaces with ease.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀 &lt;a href="https://github.com/anikakash" rel="noopener noreferrer"&gt;Follow me on GitHub&lt;/a&gt;🚀&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Linux - লিনাক্স</title>
      <dc:creator>Anik Dash Akash</dc:creator>
      <pubDate>Fri, 06 Sep 2024 20:18:26 +0000</pubDate>
      <link>https://forem.com/anikakash/linaaks-1p1j</link>
      <guid>https://forem.com/anikakash/linaaks-1p1j</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Take the control power of your os! Don't give your os to control to you&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;আমরা সবাই কম বেশি এই শব্দটার সাথে পরিচিত। শব্দটা চোখে পড়লেই ভেসে উঠে কালো একটা স্ক্রিনযেখানে হাজার হাজার লাইনের কোড স্ক্রল হতে থাকে আর একজন হুডি পরা মানুষ বসে কোড করছে! আমরা সবাই কম বেশি হ্যাকিং মুভি বা পরিচিত লোকদের মুখে এটা শুনে এসেছি যে লিনাক্স চালাতে হলে আপনাকে একজন হ্যাকার হতে হবে। কিন্তু এটি একদম ভুল ধারণা। আপনি যখন প্র্রথম কম্পিউটার চালানো শুরু করবেন তখন যদি কেউ আপনাকে Microsoft Windows এর পরিবর্তে লিনাক্স অপারেটিং সিস্টেম এর একটা কম্পিউটার ধরিয়ে দিত তবে আপনি ঠিকই সেটিতে অভ্যস্ত হয়ে উঠতেন।&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%2Flt9hc68e8ia4r299rze5.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%2Flt9hc68e8ia4r299rze5.PNG" alt="a computer is like air conditioning" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  লিনাক্স কি?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;লিনাক্স&lt;/strong&gt; বুঝতে হলে আপনাকে প্রথমে অপারেটিং সিস্টেম সম্পর্কে জানতে হবে। তবে একজন কম্পিউটার ব্যবহারকারী হিসাবে আপনার অপারেটিং সিস্টেম সম্পর্কে জানা দরকার। অপারেটিং সিস্টেম হলো কম্পিউটার এর এমন একটি সফটওয়্যার যেটি কম্পিউটারের হার্ডওয়্যার এবং ব্যবহারকারীর মধ্যে সম্পর্ক স্থাপন করে। অপারেটিং সিস্টেম ছাড়া যেহেতু হার্ডওয়্যার এর সাথে যোগাযোগ করা যায় না তাই এটি ছাড়া কম্পিউটার অচল। তাহলে কি লিনাক্স একটি অপারেটিং সিস্টেম? মোটেও না লিনাক্সকে পুরোপুরি অপারেটিং সিস্টেম বললে ‍ভুল হবে। &lt;strong&gt;লিনাক্স মূলত হল একটি কার্নেল । কার্নেল মূলত একটি অপারেটিং সিস্টেম এর প্রাণ&lt;/strong&gt;। এর মাধ্যমেই অপারেটিং সিস্টেম হার্ডওয়্যার এবং সফটওয়্যার এর যোগাযোগ হয়।&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%2F26z7pm7w80rdibxu8a15.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%2F26z7pm7w80rdibxu8a15.png" alt="kernal diagram" width="230" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;আমাদের সবার ব্যাবহৃত &lt;strong&gt;Windows এরও কার্নেল আছে, এর নাম NT এবং Mac OS এর কার্নেল এর নাম XNUI&lt;/strong&gt;. কিন্তু আপনি চাইলে কিংবা লাখ লাখ টাকা খরচ করেও এদের কার্নেল এর সোর্স কোড দেখতে পারবেন না। এদের সোর্স কোড ওপেন নয়।কিন্তুলিনাক্স এর কার্নেল কোড ওপেন সোর্স । আপনি চাইলে সম্পূর্ণ নিজের মতো করে লিনাক্স কার্নেল এর উপর ভিত্তি করে একটি অপারের্টিং সিস্টেম ডিজাইন করতে পারবেন।যার কারণে বর্তমানে লিনাক্স ভিত্তিক প্রায় এক হাজার এর মতো ডিস্ট্রো এবং সেগুলোর আবার কয়েক রকমের ফ্লেভারে ডেস্কটপ এনভায়রনমেন্ট আপনি দেখতে পাবেন। শুরুর দিকে এসব জিনিসের নাম আর পার্থক্য বুঝতে গিয়ে হয়তো আপনার মাথার চুল ছিঁড়তে হতে পারে তবে ভয়ের কিছু নেই, ধীরে ধীরে শিখে যাবেন। তাহলে এবার কার্নেল নিয়ে আরো একটু জানা যাক - কার্নেল হচ্ছে অপারেটিং সিস্টেম এর সেইঅংশটি যা হার্ডওয়্যারের সাথে সংযোগ স্থাপন করে। এটি একটি কম্পিউটারের CPU, RAM এগুলোর সাথে সরাসরি সংযোগ স্থাপন করে। কার্নেল ২ প্রকার &lt;strong&gt;মনোলিথিক কার্নেল&lt;/strong&gt; আর &lt;strong&gt;মাইক্রো কার্নেল&lt;/strong&gt;। &lt;strong&gt;লিনাক্স হচ্ছে একটি মনোলিথিক কার্নেল&lt;/strong&gt; । লিনাক্স কার্নেল এর রিপোজিটরি &lt;a href="https://github.com/torvalds/linux" rel="noopener noreferrer"&gt;GITHub Repo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  লিনাক্স নামকরণ -
&lt;/h2&gt;

&lt;p&gt;লিনাসের খুব শখ ছিল তার অপারেটিং সিস্টেমের নাম হবে “ফ্রিক্স” (FREAKS) যেটা কিনা “Free”, “Freak” আর “Unix” শব্দ তিনটার মিলিত একটা রূপ। কিন্তু নামটা পছন্দ হয়নি এ্যারি লেম্কের। এ্যারি লেম্কে ছিল লিনাসের বন্ধু ও সহকর্মী এবং হেলসিংকি ইউনিভার্সিটির এফটিপি সার্ভারের এডমিনিস্ট্রেটর। এফটিপি সার্ভার দিয়ে খুব সহজেই যেকোন ফাইল সবার সাথে শেয়ার করা যায়। এ্যারিই লিনাসকে বুদ্ধি দিল যে নতুন OS এর সোর্সকোডকে এফটিপি সার্ভারে শেয়ার করতে, যাতে করে পৃথিবীর সবার জন্যই এর কোডটা উন্মুক্ত থাকে আর যে কেউ সেটা ব্যবহার করতে পারে। তবে এজন্য “ফ্রিক্স” নামটা পছন্দ হলনা এ্যারির। সে “লিনাক্স” নামের এক ফোল্ডারে এফটিপি সার্ভারে সেই কোডগুলো রেখে দিলেন। সেই থেকে নাম হয়ে গেল “লিনাক্স”। ওহ, বলতে তো ভুলেই গেলাম কেন এর নাম লিনাক্স হল, সহজ ব্যাপার “Linus’s Unix” থেকেই এ্যারির মাথায় লিনাক্স নামটা চলে আসে। আসল নাম হারিয়ে লিনাক্স এখন যে নামে পরিচিত সেটা আসলে তার ডাউনলোড করার জন্য রাখা ফোল্ডারের নাম।কিন্তু লিনাস এই নামটা মানতে পারেন নি। কারণ লিনাক্স নামটা তার নামের সাথে মিলে যায় এবং তিনি ভাবেন যে এতে তার অহংকারী মনোভাব প্রকাশ পেতে পারে। কিন্তু তত সময়ে অনেক মানুষ সেটা ডাউনলোড করে নেয়। ফলে বাধ্য হয়ে নামটা মেনে নিতে হয় তাকে। এরপর থেকে লিনাক্সের যাত্রা শুরু হয়।&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%2Fawg97oxr7037hrn07nau.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%2Fawg97oxr7037hrn07nau.png" alt="GNU linux icon" width="800" height="839"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  লিনাক্সের ম্যাস্কট-
&lt;/h2&gt;

&lt;p&gt;কর্পোরেটরা যখন লিনাক্স ব্যাবহার শুরু করলেন তখন এর জন্য ম্যাস্কট এর প্রয়োজন দেখা দিল। ম্যাস্কট এর খোজ শুরু পড়লে লিনাস নিজেই পেঙ্গুইন এর কথা বলেন। তবে সাধারণ কোন পেঙ্গুইন নয়, নাদুসনুদুস পেঙ্গুইন। যেটা কিনা আবার অলস ভঙ্গিতে খাবার খাওয়ার পর ছোটখাট ভুড়ি উঁচিয়ে দু’পা ছড়িয়ে মাটিতে বসে আছে ! আসলে লিনাস অস্ট্রেলিয়ার ক্যানবেরার National Zoo &amp;amp; Aquarium এ অবকাশ যাপন এ গিয়ে তিনি একটা পেঙ্গুইন এর কামড় খেয়েছিলেন । তারজন্যই তার মাথায় ম্যাস্কট হিসাবে পেঙ্গুইন এর কথা আসে। তাই অফিসিয়াল মাসকট হিসেবে পেঙ্গুইনকেই পছন্দ করা হল, এর নাম দেয়া হল TUX ।এই সেই নাদুসনুদুস পেঙ্গুইন। টার্কিডো আর লিনাক্স মিলে হল টাক্স। পেঙ্গুইন লিনাসকে কামড় দিলেও একে ভয়ের কিছু নেই। যেখানেই এর ছবি দেখবেন বুঝে নিবেন সেখানেই লিনাক্স রয়েছে।&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%2Fldqzbii26pwwv1x9l76c.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%2Fldqzbii26pwwv1x9l76c.png" alt="Linux TUX" width="317" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  লিনাক্স নিয়ে কিছু মিথ-
&lt;/h2&gt;

&lt;p&gt;লিনাক্স চালাতে হলে কমান্ড লাইনে কাজ করতে হবে। প্রোগ্রামার না হলে লিনাক্স চালানো যাবে না। এর কারণ হল প্রায় সব Windows ব্যাবহারকারীই মনে করেন যে লিনাক্স চালাতে হলে টার্মিনাল ছাড়া ব্যবহার করা যায় না। টার্মিনালে কমান্ড দিয়ে দিয়ে কম্পিউটার ব্যবহার করতে হয়। কিন্তু লিনাক্সে ইন্টারফেইস এসেছে প্রায় ১৬ বছর আগে। বর্তমানে লিনাক্সের ইন্টারফেইস কতটা উন্নত হয়েছে সেটা না দেখলে বুঝা সম্ভব না। কিন্তু আমরা অনেকেই প্রজন্ম থেকে প্রজন্ম পাইরেটেড windows ব্যবহার করে আসছি বলেই এত বড় অন্ধকারে আমরা। এছাড়া অনেকে লিনাক্স না চালানোর পিছনে যুক্তি দেন যে এটা হ্যাকারদের জন্য, আর আমি একজন সাধারন ইউজার এবং আমি তো টেকী না তাই লিনাক্স আমার জন্য না। হ্যা লিনাক্স হ্যাকারদের জন্য একটি আদর্শ অপারেটিং ‍সিস্টেম তাই বলে একজন সাধারণ ইউজার ব্যবহার করতে পারবে না এর কোন যুক্তি নেই। এছাড়া লিনাক্স সর্ম্পূর্ণ ফ্রী তাই Windows এর মতো টাকা দিয়ে ব্যবহার করতে হয় না। আপনি একজন সাধারণ ব্যবহারকারী হলেও লিনাক্সে আপনি আপনার দৈনন্দিন কাজ গুলো অনেক ক্ষেত্রে সহজে করে ফেলতে পারেন। তবে এর জন্য আপনার হালকা পাতলা কোডিংও জানতে হতে পারে। কিন্তু আপনি একজন নরমাল ইউজার হিসেবেও লিনাক্স ব্যাবহার করতে পারেন। অনেকে বলে থাকেন যে লিনাক্সে দরকারী সফটওয়্যার এবং হাডওয়্যার সাপোর্ট নেই। এটা রীতিমতো একটা মিথ্যা রটানো । আচ্ছা তাহলে একটা প্রশ্নের উত্তর করুন তো, যারা লিনাক্স চালায় তাহলে তারা কি ব্যবহার করে? লিনাক্সে কমিউনিটি কত বড় আপনি সেটা তখনভাবতেও পারবেন না। যদি কোন কোম্পানি লিনাক্সে সার্পোট না দেয় তবে লিনাক্সের স্বেচ্ছাসেবী ডেভেলপার কমিউনিটি নিজেই রিভার্স ইঞ্জিনিয়ারিং করে তৈরী করে ফেলে। তবে বর্তমানে সকল কোম্পানি ই লিনাক্স সার্পোট দেয় । তবে এদিকে &lt;strong&gt;Nvidia&lt;/strong&gt; একটু ভিন্ন। তাদের লিনাক্স সার্পোট বাজে ।&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%2F2an3olza0w3rlfx2n5vx.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%2F2an3olza0w3rlfx2n5vx.png" alt="Fuck you nvidia" width="527" height="294"&gt;&lt;/a&gt;&lt;br&gt;
     ছবি: লিনাস টরভল্ডস (Linus Torvalds)&lt;/p&gt;

&lt;p&gt;চাইলে এই ভিড়িওটা দেখে নিতে পারেন &lt;a href="https://youtu.be/i2lhwb_OckQ" rel="noopener noreferrer"&gt;https://youtu.be/i2lhwb_OckQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ইভেন আমি নিজেও আমার Nvidia গ্রাফিক্স কার্ডের জন্য অনেক সমস্যায় পড়েছিলাম । শুরুতে আমার পিসি বার বার Hage করত। পরে সেটা নিয়ে ঘাটাঘাটি করতে গিয়ে দেখি যে আমার পিসিতে লিনাক্স অটো গ্রাফিক্স কার্ড ড্রাইভার ইন্সটল করতে পারেন নাই যার কারণে শুরুর প্রথম সপ্তাহের অভিঙ্গতা অনেক খারাপ ছিল।পরে ম্যানুয়ালি ড্রাইভার ইন্সটল করে নিয়েছি। আপনাদেরও ভয়ের কিছু নেই। আমাদের লিনাক্স কমিউনিটি অনেক ভাল। ডেভলপারা আমাদের মতো ইউজারদের জন্য ফ্রীতেই লিনাক্সের জন্য ড্রাইভার বানিয়ে দেন। এছাড়া লিব্রা অফিস যখন MicroSoft Office এর বিকল্প এবং সমক্ষ হয়ে উঠতে শুরু করে তখন MicroSoft একটা বাজে রকমের কাজ করে বসে। তারা তাদের ফাইলের ফরম্যাট চেইঞ্জ করে যেখানে প্রথমে Doc ছিল সেটা এখন DocX করে ফেলে। এরকম আলো অনেক নোংরামি করে তারা। কিন্তু কিছু দিনের ভিতর লিনাক্সের বিশাল কমিউনিটিও সেই সমস্যার সমাধান করে ফেলে।&lt;/p&gt;

&lt;h2&gt;
  
  
  লিনাক্স ভিত্তিক অপারেটিং সিস্টেম -
&lt;/h2&gt;

&lt;p&gt;লিনাক্স কার্নেল এর উপর ভিত্তি করে প্রায় ৭০০ এর বেশি ডিস্ট্র্রো তৈরী হয়েছে। বর্তমানে ২০০ এর বেশি সক্রিয় আছে। তবে যেগুলো বন্ধ হয়ে গেছে ঐগুলো অবশ্য বিভিন্ন কারনে বন্ধ হয়েছে। লিনাক্স কার্নেলের উপর ভিত্তি করে বাননো অপারটিং সিস্টেম গুলো কে বলা হয় Linux Distribution বা সংক্ষেপে Distro.একটা ডিস্ট্রো মূলত বেশ কিছু জিনিস নিয়ে গঠিত । এগুলো হল লিনাক্স কার্নেল, GNU টুলস এবং লাইব্রেরিজ, সিস্টেম সফটওয়্যার , উইন্ডো সিস্টেম, উইন্ডো ম্যানেজার, ডেস্কস্টপ এনভায়রনমেন্ট , প্যাকেজ ম্যানেজার, ফ্রি এবং ওপনে র্সোস সফটওয়্যার । এসব নিয়েই তৈরী একটা ডিস্ট্রে।&lt;/p&gt;

&lt;h2&gt;
  
  
  তাহলে এবার এই বিষয় গুলো নিয়ে জানা যাক -
&lt;/h2&gt;

&lt;p&gt;সব লিনাক্স ডিস্ট্র্রো গুলোতে তো লিনাক্স কার্নেল থাকবে সেটা এতক্ষনে আমরা বুঝে গেছি। আর যা আছে সেগুলো সম্পর্কে কিছু জানা যাকঃ-&lt;/p&gt;

&lt;h2&gt;
  
  
  উইন্ডো সিস্টেম :
&lt;/h2&gt;

&lt;p&gt;এটি মূলত কম্পিউটাররে গুই বা গ্রাফিক্যাল ইউজার ইন্টারফেইস। যেখানে আপনি মাউস ব্যাবহার করে বিভিন্ন আইকনে বা মেনুতে ক্লিক করে ব্যবহার উপযোগী পরিবেশ তৈরী করতে পারবেন। লিনাক্স ভিত্তিক অপারেটিং সিস্টেম এ X Window System ব্যাবহৃত হয়। আর Windows এ ব্যাবহৃত হয় Deskstop Window Manager .&lt;/p&gt;

&lt;h2&gt;
  
  
  উইন্ডো ম্যানেজার:
&lt;/h2&gt;

&lt;p&gt;উইন্ডো সিস্টেম এ কিভাবে সবকিছুৃ শো করবে সেটা মূলত উইন্ডো ম্যানেজার কন্ট্রোল করে। লিনাক্স ডিস্ট্রো গুলোতে X Window Manager ব্যাবহার করা হয়।&lt;/p&gt;

&lt;h2&gt;
  
  
  প্যাকেজ ম্যানেজার:
&lt;/h2&gt;

&lt;p&gt;এটি হল আপনার সিস্টেম এ সফটওয়্যার ইন্সটল, আপগ্রেড, কনফিগার বা রিমুভ এর কাজ করে। লিনাক্স ডিস্ট্রো গুলো একই সফটওয়্যার ব্যাবহার করে থাকে তবে তাদের এই প্যাকেজ ম্যানেজার গুলো ভিন্ন। কয়েকটি জনপ্রিয় প্যাকেজ ম্যানেজার হল RPM, DpKg, Pacman&lt;/p&gt;

&lt;h2&gt;
  
  
  ডেস্কটপ এনভায়রনমেন্ট
&lt;/h2&gt;

&lt;p&gt;ডেস্কটপ এনভায়রনমেন্ট (DE) বা কম্পিটারের গ্রাফিক্যাল ইউজার ইন্টারফেস। সেখানে একজন ইউজারকে তার কম্পিউটার ব্যাবহার করার একটা সুন্দর এবং সহজবোধ্য পরিবেশ দেয়া হয়। সহজ কথায় বললে আপনি Windows Xp ব্যাবহার করলে যেমন ইন্টার ফেইস পাচ্ছেন সেটা ৮ বা ১০ এ এক হবে না। যদি আপনার ডেস্কটপ এনভায়রনমেন্ট পছন্দ না হয় তবেও সেটা ব্যাবহার করতেই হবে। তবে থিম দিয়ে কিছু পরিবর্তন করা যায় কিন্তু আসলে তেমন পরিবর্তন আসে না। তবে লিনাক্সে বেশ কিছু ডেস্কটপ এনভায়রনমেন্ট আছে এবং সেটা আপনি পছন্দ করে নিতে পারেন। এ রকম কিছু ডেস্কটপ এনভায়রনমেন্ট হল &lt;strong&gt;Cinnamon&lt;/strong&gt;, &lt;strong&gt;KDE Plasma&lt;/strong&gt;, &lt;strong&gt;XFCE&lt;/strong&gt;, &lt;strong&gt;MATE&lt;/strong&gt;, **Gnome **etc. এই প্রতিটা ডেস্কটপ এনভায়রনমেন্ট নিয়ে আরো অনেক শেয়ার করা য়ায় (যেগুলো আমি ব্যাবহার করেছি) আপাতত শুধু ছবি দিয়ে শেষ করলাম। ইন্টারনেট ঘেটে জেনে নিতে পারেন আরো আগ্রহ থাকলে।&lt;/p&gt;

&lt;h2&gt;
  
  
  Cinnamon DE
&lt;/h2&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%2Fxjepvgc731vqnr905hwn.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%2Fxjepvgc731vqnr905hwn.png" alt="Cinnamon DE" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  KDE Plasma
&lt;/h2&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%2Fc0yuypk2u2tubr6fhxjp.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%2Fc0yuypk2u2tubr6fhxjp.png" alt="KDE Plasma" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  XFCE
&lt;/h2&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%2F9yujil3mc7y9uun835nz.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%2F9yujil3mc7y9uun835nz.png" alt="XFCE" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Gnome
&lt;/h2&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%2Fb7tpzp0u56ovgha1ja3q.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%2Fb7tpzp0u56ovgha1ja3q.png" alt="Gnome" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ডিস্ট্রো পরিচিতি -
&lt;/h2&gt;

&lt;p&gt;আসলে লিনাক্সে শিফট করার সময় সব থেকে বড় সমস্যা বা কনফিউজিং বিষয় যেটা সেটা ডিস্ট্রো এবং ডেস্কটপ এনভায়রনমেন্ট। তবে উপরে ডেস্কটপ এনভায়রনমেন্ট নিয়ে আলোচনা করা হলো এবার তাহলে ডিস্ট্রোতে ডু মারা যাক। ডিস্ট্রো আসলে কি? এটা দিয়ে কি হ্যাক করে ফেলে নাকি? সহজে বললে ডিস্ট্রো হল একটি অপারেটিং সিস্টেম। কিন্তু এই ডিস্ট্রো এর উপর ভিত্তি করে আরো অনেক ডিস্ট্রো তৈরী করা হয়েছে। এই জিনিস টা এত বড় যে আমি নিজেও এখন সব জানতে পারিনি । আপনি গুগল করে দেখতে পারেন। তবে ছোট করে বলে রাখি ডেবিয়ান হল একটি স্বতন্ত্র অপারেটিং সিস্টেম । এর উপর ভিত্তি করে তৈরী শত শত ডিস্ট্রো আছে তার মাঝে একটি উবুন্টু এটির উপর ভিত্তি করে আরো অনেক অপারেটিং সিস্টেম তৈরী করা হয়েছে। আবার উবন্টুর DE এর উপর ভিত্তি করে উবন্টুর ই আরো কয়েক রকমের ফ্লেভার আছে। আবার Arch (আর্চ) একটি স্বতন্ত্র ডিস্ট্রো। এটা থেকে তৈরী Manjaro, Endeavor OS, Arch Bang ইত্যাদিএগুলোর আবার অনেক গুলো DE আছে। যেমন XFCE, KDE Plasma, GNOME&lt;/p&gt;

&lt;p&gt;আসলে এখানে চাইলে আমি প্রতিটা DE এবং ডিস্ট্রো নিয়েই কথা বলতে পারতাম কিন্তু এতে করে এই আটিকেল আরো অনেক বড় হয়ে যাবে। তবে আপনি চাইলে সব গুলো ডিস্ট্রো এর অফিশিয়াল সাইটে ঘুরে আসতে পারেন এবং কোন কোন ডিস্ট্রোতে কি কি ডেস্কটপ এনভায়রনমেন্ট সেগুলো দেখতে পারেন। এবং ইউটিউবেও অনেক রিভিউ পাবেন সেসব এর।&lt;/p&gt;

&lt;p&gt;ও হ্যা এখানে আমি কালি লিনাক্স নিয়ে কিছুই বলি নি কারণ আমি সেটা ব্যাবহার করিনি। এছাড়া লিনাক্স মানেই কিন্তু কালি লিনাক্স না। এই কালি লিনাক্স এর ভয় নিয়ে আরো অনেকে লিনাক্সে আসতে চায় না। সুতরাংলিনাক্স মানেই কালি লিনাক্স নয় এখানে আরো অনেক সুন্দর ডিস্ট্রো আছে। যেগুলো ব্যবহার করে আপনিও আস্তে আস্তে লিনাক্স নিয়ে অনেক কিছু শিখতে পারেন।&lt;/p&gt;

&lt;p&gt;আরো একটা কথা এখানে বলে নেই যে লিনাক্সে টার্মিনাল নামে একটা জিনিস আছে যার মাধ্যমে আপনি অনেক কিছু করতে পারেবেন। একটা ছোট উদাহরণ দেই টার্মিনাল ব্যবহার করে আপনি আপনার কম্পিউটারে যেকোনো ডিরেক্টরিতে যেতে পারবেন এবং সেখানে ফাইল ফোল্ডার ক্রিয়েট করতে পারবেন। এছাড়া কমান্ড লাইনে আরো অনেক অপারেশনও করতে পারবেন। তবে টার্মিনাল ব্যবহার না করে আপনি লিনাক্স চালাতে পারবেন&lt;/p&gt;

&lt;p&gt;এই লেখাটির এর উদ্দেশ্য ছিলো একজন বিগিনার এর কাছে লিনাক্স এর কনসেপ্টটা তুলে ধরা। কারন এতে করে যখন কেউ একজন লিনাক্সে আসবে সে যেন ডিস্ট্রো, প্যাকেজ ম্যানেজার , ডেস্কটপ এনভায়রনমেন্ট এসব টার্ম নিয়ে সমস্যায় না পড়ে এবং নিজে সিদ্ধান্ত নিতে পারে যে তার কেমন ডিস্ট্রো দরকার । আর সর্বোপরি ফেইসবুক + অনলাইনে অনেক লিনাক্স কমিউনিটি গ্রুপ আছে যেখানে আপনি হেল্প পেতে পারেন।&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;** লিনাক্স জগতে আপনাকে স্বাগতম !**&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>linux</category>
      <category>opensource</category>
      <category>archlinux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Top 10 Clean Code Rules 🎨🚀</title>
      <dc:creator>Anik Dash Akash</dc:creator>
      <pubDate>Thu, 05 Sep 2024 19:34:27 +0000</pubDate>
      <link>https://forem.com/anikakash/top-10-clean-code-rules-13i6</link>
      <guid>https://forem.com/anikakash/top-10-clean-code-rules-13i6</guid>
      <description>&lt;p&gt;When writing code, it's like writing a story. A good story is easy to read, and you understand what's happening right away. The same goes for code! Clean code is not just for computers; it’s for other developers too. Here are the top 10 rules that will help you write code like a pro!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Use Meaningful Names
&lt;/h2&gt;

&lt;p&gt;Give your variables, functions, and classes names that clearly describe what they do. For example, instead of &lt;code&gt;x&lt;/code&gt; or &lt;code&gt;y&lt;/code&gt;, use &lt;code&gt;totalScore&lt;/code&gt; or &lt;code&gt;userName&lt;/code&gt;. It’s like naming your toys—you don’t call them just “toy 1” or “toy 2,” right?&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Keep Functions Small
&lt;/h2&gt;

&lt;p&gt;A function should do only one thing and do it well. If your function is too long, it can be confusing. Imagine trying to learn 10 magic tricks at once! It's much easier if you focus on one at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Don’t Repeat Yourself (DRY)
&lt;/h2&gt;

&lt;p&gt;If you find yourself writing the same code over and over again, try to combine it into a single function. Think about it—if you have one awesome magic trick, why not reuse it instead of making new ones every time?&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Use Comments Wisely
&lt;/h2&gt;

&lt;p&gt;Comments should explain &lt;em&gt;why&lt;/em&gt; something is happening, not &lt;em&gt;what&lt;/em&gt; is happening. The code itself should be clear enough. Imagine you wrote a secret message for your friend—you wouldn’t explain every single word, only the tricky parts.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Consistent Formatting
&lt;/h2&gt;

&lt;p&gt;Keep your code looking neat. Use proper spacing, indentation, and line breaks. Just like a tidy room is easier to move around in, clean and organized code is easier to read and understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Avoid Magic Numbers
&lt;/h2&gt;

&lt;p&gt;A magic number is just a random number in your code. If you use numbers, give them names or store them in variables. For example, instead of &lt;code&gt;12&lt;/code&gt;, use &lt;code&gt;numberOfMonthsInAYear&lt;/code&gt;. This way, everyone knows what that number means!&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Handle Errors Gracefully
&lt;/h2&gt;

&lt;p&gt;Don’t just let your code crash if something goes wrong—write code to handle mistakes. If you’re playing a game, you don’t want it to freeze if you press the wrong button, right? Similarly, your code should know what to do when something unexpected happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Use Clear Conditions
&lt;/h2&gt;

&lt;p&gt;When you write &lt;code&gt;if&lt;/code&gt; statements or loops, make them easy to understand. Instead of doing everything in one line, break it up so others can follow along. It’s like giving directions—be clear, so no one gets lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Keep Things Simple
&lt;/h2&gt;

&lt;p&gt;Don’t over-complicate things. Simple code is better because it's easier to fix and understand. Think about building a LEGO house—it’s much easier to follow the instructions than making up something overly complicated.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Refactor Regularly
&lt;/h2&gt;

&lt;p&gt;Always look back at your code and see if you can improve it. It’s like cleaning your room—you need to tidy it up now and then to make sure everything is in the right place!&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%2Fsluh0k9sf8dq1g3x7dbv.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%2Fsluh0k9sf8dq1g3x7dbv.png" alt="Image description" width="592" height="532"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;By following these 10 clean code rules, you’ll write code that’s easy for others to read and understand. It’s like telling a great story—clear, simple, and fun!&lt;/p&gt;

&lt;p&gt;you can follow me on &lt;a href="https://github.com/anikakash" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cleancode</category>
      <category>programming</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>How Can I Setup Sublime Text Editor For Competitive Programming</title>
      <dc:creator>Anik Dash Akash</dc:creator>
      <pubDate>Fri, 30 Aug 2024 17:51:02 +0000</pubDate>
      <link>https://forem.com/anikakash/how-can-i-setup-sublime-text-editor-for-competitive-programming-52ga</link>
      <guid>https://forem.com/anikakash/how-can-i-setup-sublime-text-editor-for-competitive-programming-52ga</guid>
      <description>&lt;h2&gt;
  
  
  Coding Environment Setup
&lt;/h2&gt;

&lt;p&gt;sublime is the best text editor for Competitive Programming. Also, it is a lite weight text editor and You can use file input-output so easily Handel big input-output.&lt;/p&gt;

&lt;p&gt;So, for setup sublime before you need to prepare your computer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install C/C++ compiler :
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://youtu.be/hCLIDph7-mU?si=lsk_OickFcSku0Mb" rel="noopener noreferrer"&gt;windows&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For linux run this command. pacman is my package manager. Here you can use your package manager command. It's for arch-based Distro. sudo pacman -Syu gcc&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://youtu.be/0z-fCNNqfEg?si=wrdvs3hpP8muWcxw" rel="noopener noreferrer"&gt;Mac os&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install Sublime
&lt;/h2&gt;

&lt;p&gt;Now it's time to install Sublime on your Computer. &lt;a href="https://www.sublimetext.com/download" rel="noopener noreferrer"&gt;Goto Sublime Offical Site&lt;/a&gt; and download sublime for your current Operating System.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Setup Our Sublime
&lt;/h2&gt;

&lt;p&gt;1 . First Do partition your sublime screen into 3 part. one is for your code and the other two is for the input and output section.&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%2Fwk3omyoiz32zfbnts5ii.gif" 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%2Fwk3omyoiz32zfbnts5ii.gif" alt="Sublime view" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2 . Then click &lt;strong&gt;&lt;em&gt;Tools &amp;gt; Build System &amp;gt; New Build System&lt;/em&gt;&lt;/strong&gt; Now a file will be open. In that file, you need to paste the below code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"shell_cmd"&lt;/span&gt;: &lt;span class="s2"&gt;"g++ &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; -o &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file_path&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file_base_name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;,
    &lt;span class="s2"&gt;"file_regex"&lt;/span&gt;: &lt;span class="s2"&gt;"^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$"&lt;/span&gt;,
    &lt;span class="s2"&gt;"working_dir"&lt;/span&gt;: &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file_path&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;,
    &lt;span class="s2"&gt;"selector"&lt;/span&gt;: &lt;span class="s2"&gt;"source.c, source.c++"&lt;/span&gt;,
    &lt;span class="s2"&gt;"variants"&lt;/span&gt;:
    &lt;span class="o"&gt;[&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s2"&gt;"name"&lt;/span&gt;: &lt;span class="s2"&gt;"Run"&lt;/span&gt;,
            &lt;span class="s2"&gt;"shell_cmd"&lt;/span&gt;: &lt;span class="s2"&gt;"g++ -O2 -static -Wno-unused-result -std=c++17 -DONLINEJUDGE &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; -o &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file_path&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file_base_name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; &amp;amp;&amp;amp; &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file_path&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;file_base_name&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Almost done!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3 . Now Save this file and remember the name of the file it will need in step 7 . and the file extension will be &lt;strong&gt;&lt;em&gt;.sublime-build&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;4 . Now Create a Folder. And Make &lt;strong&gt;&lt;em&gt;.cpp&lt;/em&gt;&lt;/strong&gt; file and two &lt;strong&gt;&lt;em&gt;.txt&lt;/em&gt;&lt;/strong&gt; file. Make sure that those three files are in a directory.&lt;/p&gt;

&lt;p&gt;5 . Now add your Folder in sublime. &lt;strong&gt;&lt;em&gt;Click File &amp;gt; Open Folder&lt;/em&gt;&lt;/strong&gt; and select your folder.&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%2F0q42wtypf24pey134x3q.gif" 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%2F0q42wtypf24pey134x3q.gif" alt="script upload" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When your add a file in a section then instantly save this file in that section by clicking &lt;strong&gt;&lt;em&gt;ctr+s&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;6 . Now Past this is in your &lt;strong&gt;&lt;em&gt;.cpp&lt;/em&gt;&lt;/strong&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt; &lt;span class="cp"&gt;#include&lt;/span&gt;&lt;span class="cpf"&gt;&amp;lt;bits/stdc++.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt;    &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

   &lt;span class="cp"&gt;#ifdef ONLINEJUDGE
&lt;/span&gt;       &lt;span class="kt"&gt;clock_t&lt;/span&gt; &lt;span class="n"&gt;tStart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
       &lt;span class="n"&gt;freopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"input.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"r"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;stdin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//can need to change file . this one for taking input&lt;/span&gt;
       &lt;span class="n"&gt;freopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"output.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// this one for output&lt;/span&gt;
  &lt;span class="cp"&gt;#endif
&lt;/span&gt;
       &lt;span class="c1"&gt;//Your Code&lt;/span&gt;

  &lt;span class="cp"&gt;#ifdef ONLINEJUDGE
&lt;/span&gt;     &lt;span class="n"&gt;fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;&amp;gt;&amp;gt; Runtime: %.10fs&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;tStart&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;CLOCKS_PER_SEC&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// this line gives your code runtime&lt;/span&gt;
  &lt;span class="cp"&gt;#endif
&lt;/span&gt;
   &lt;span class="k"&gt;return&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7 . now click &lt;strong&gt;&lt;em&gt;Tools &amp;gt; Build System &amp;gt; select file which is created in step 3&lt;/em&gt;&lt;/strong&gt;. Now write an input and output code and save input in the input file.&lt;/p&gt;

&lt;p&gt;8 . press &lt;strong&gt;&lt;em&gt;ctrl + shift + B&lt;/em&gt;&lt;/strong&gt; and a pop up will bring your sublime click one which has -Run part. WOW See you can successfully Generate your output.&lt;/p&gt;

&lt;p&gt;9 . Now whenever you need to compile your code just click &lt;strong&gt;&lt;em&gt;ctrl + B&lt;/em&gt;&lt;/strong&gt; and you will compile and generate an output corresponding to your input.&lt;/p&gt;

</description>
      <category>competativeprogramming</category>
      <category>100daysofcode</category>
      <category>codepen</category>
    </item>
  </channel>
</rss>
