<?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>DEV Community: Nikita Maharana</title>
    <description>The latest articles on DEV Community by Nikita Maharana (@nikita_maharana_879884df2).</description>
    <link>https://dev.to/nikita_maharana_879884df2</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%2F3928767%2F61477ffb-2e6e-43c1-997a-84cc3833ef7b.png</url>
      <title>DEV Community: Nikita Maharana</title>
      <link>https://dev.to/nikita_maharana_879884df2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nikita_maharana_879884df2"/>
    <language>en</language>
    <item>
      <title>Callbacks, Promises &amp; Async – await Explained</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Mon, 01 Jun 2026 14:07:04 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/callbacks-promises-async-await-explained-44p1</link>
      <guid>https://dev.to/nikita_maharana_879884df2/callbacks-promises-async-await-explained-44p1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Callbacks, Promises &amp;amp; Async – await:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Callbacks -&amp;gt; Callback Hell -&amp;gt; Promises -&amp;gt; Promise Chaining -&amp;gt; Async/Await -&amp;gt; IIFE &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synchronous vs Asynchronous&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synchronous&lt;/strong&gt;&lt;br&gt;
The code that runs line by line is called a synchronous code. Each instruction waits for the previous one to finish before moving on to the next.But the problem is it can block the UI if a task is slow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asynchronous&lt;/strong&gt;&lt;br&gt;
The code that takes some time to get executed or slow tasks (timers, API calls) are handed off. If there are multiple lines of code before and after the asynchronous code then remaining code keeps running and it does not wait for the asynchronous code to get executed. Result is handled later when ready.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Async demo with setTimeout&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;one&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;two&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// runs after 4s&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;three&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;four&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Output: one → two → three → four → hello&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Callbacks&lt;/strong&gt;&lt;br&gt;
A callback is a function passed as an argument to another function and called inside it. It's how JS handles "do this first, then do that" logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculator&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="nx"&gt;sumCallback&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;sumCallback&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;// sum is called here&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;calculator&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;sum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Output: 3&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Callback Hell (Pyramid of Doom)&lt;/strong&gt;&lt;br&gt;
When callbacks are nested inside each other to sequence async tasks, code becomes deeply indented and hard to read and maintain. This is called Callback Hell.&lt;br&gt;
eg:&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;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dataId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;getNextData&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="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dataId&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;getNextData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;getNextData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Callback Hell &lt;/span&gt;
&lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data2...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data3...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data4...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;The deeper the nesting, the harder to read, debug, and maintain. Promises solve this issue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Promises&lt;/strong&gt;&lt;br&gt;
A Promise is a JS object representing the eventual completion or failure of an asynchronous task. It takes a function with two handlers: resolve (success) and reject (failure).&lt;br&gt;
There are 3 states of a promise, they are&lt;br&gt;
i.Pending&lt;br&gt;
Result is undefined. Task still in progress.&lt;br&gt;
ii.Fulfilled&lt;br&gt;
resolve(value) was called. Task succeeded.&lt;br&gt;
iii.Rejected&lt;br&gt;
reject(error) was called. Task failed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Creating a Promise&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getPromise&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="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I am a promise&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// OR&lt;/span&gt;
    &lt;span class="c1"&gt;// reject("error");&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Consuming a Promise&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;promise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getPromise&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fulfilled:&lt;/span&gt;&lt;span class="dl"&gt;"&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="c1"&gt;//runs if promise gets resolved or fullfilled&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;promise&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rejected:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// runs if promise gets rejected&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;resolve and reject are callbacks provided by JS -- you just call them. If you reject without .catch(), you get an &lt;strong&gt;Uncaught (in promise) error&lt;/strong&gt; in console.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Promise Chaining&lt;/strong&gt;&lt;br&gt;
Instead of nesting, return a new Promise inside .then() and chain another .then(). This keeps code flat and readable -- this is the fix for callback hell.&lt;br&gt;
eg:&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;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dataId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&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;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="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dataId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&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="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Promise Chain (clean &amp;amp; flat!)&lt;/span&gt;
&lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&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;&lt;strong&gt;Async / Await&lt;/strong&gt;&lt;br&gt;
When we use async before a function makes it always return a Promise.&lt;/p&gt;

&lt;p&gt;await pauses execution inside the async function until a Promise settles -- making async code look and read like synchronous code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dataId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&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;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="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;dataId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&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="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Async-Await&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getAllData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data1...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// waits here&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data2...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// then waits here&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data3...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;getAllData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Still in async await we always have to keep the await data inside a function and every time call it to show the execution..to solve this issue we have IIFE...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IIFE — Immediately Invoked Function Expression&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An IIFE is a function that runs immediately as soon as it is defined. It only executes once. Useful to run async code at the top level without wrapping it in a named function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Regular IIFE&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// runs immediately&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;

&lt;span class="c1"&gt;// Arrow IIFE&lt;/span&gt;
&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// runs immediately&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;

&lt;span class="c1"&gt;// Async IIFE — most common use case&lt;/span&gt;
&lt;span class="p"&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data1...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;getting data2...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;Pattern: *&lt;/em&gt;(func)() — wrap function in () to make it an expression, then call it with () immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br&gt;
Callbacks → Callback Hell problem → Promises fix it → Promise Chaining improves readability → Async/Await makes it look synchronous → IIFE lets you run async code immediately.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>web</category>
      <category>api</category>
      <category>programming</category>
    </item>
    <item>
      <title>From Tutorials to Real Learning: My Frontend Development Journey</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Sun, 24 May 2026 07:04:11 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/from-tutorials-to-real-learning-my-frontend-development-journey-2524</link>
      <guid>https://dev.to/nikita_maharana_879884df2/from-tutorials-to-real-learning-my-frontend-development-journey-2524</guid>
      <description>&lt;p&gt;When I first started learning HTML and CSS, I believed I understood web development quite well. I could follow tutorials, recreate designs, and build simple webpages. At that stage, it felt like I had learned enough to move forward confidently.&lt;/p&gt;

&lt;p&gt;However, after taking a long break from coding, I returned and realized something important: knowing syntax is very different from truly understanding development.&lt;/p&gt;

&lt;p&gt;I knew how to write HTML and CSS, but I did not fully understand how real projects were structured, how developers approached problem-solving, or how different technologies worked together in practical applications.&lt;/p&gt;

&lt;p&gt;Instead of only watching tutorials again, I decided to focus on building projects consistently.&lt;/p&gt;

&lt;p&gt;I started creating both small and larger projects using HTML, CSS, and JavaScript. After completing nearly 40 to 50 projects, I began to understand development in a much deeper way. Concepts that once seemed confusing gradually became clearer through practice and experimentation.&lt;/p&gt;

&lt;p&gt;During this process, I learned:&lt;br&gt;
 =&amp;gt; how layouts behave across different screen sizes&lt;br&gt;
 =&amp;gt; how JavaScript interacts with the DOM&lt;br&gt;
 =&amp;gt; how APIs connect frontend applications with backend services&lt;br&gt;
 =&amp;gt; how debugging improves problem-solving skills&lt;br&gt;
 =&amp;gt; how project structure and clean code matter in real-world development&lt;/p&gt;

&lt;p&gt;One of the most important changes in my learning journey came from exploring github(&lt;a href="https://github.com/Nikita-05112000" rel="noopener noreferrer"&gt;https://github.com/Nikita-05112000&lt;/a&gt;) more actively. I started studying open-source repositories, observing how experienced developers organized their code, and understanding how collaborative development works in practice. Exploring real projects gave me a perspective that tutorials alone could not provide.&lt;/p&gt;

&lt;p&gt;At the same time, I became more involved in the developer community. I began writing articles on DEV Community(&lt;a href="https://dev.to/nikita_maharana_879884df2"&gt;https://dev.to/nikita_maharana_879884df2&lt;/a&gt;) to document my daily learning sessions and share the concepts I was exploring. Writing regularly helped me strengthen my understanding while also improving my ability to explain technical topics clearly.&lt;/p&gt;

&lt;p&gt;I also started sharing my work consistently on LinkedIn(&lt;a href="https://www.linkedin.com/in/nikita-maharana-750580361/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/nikita-maharana-750580361/&lt;/a&gt;). Through this, I connected with more developers, interacted with people from the industry, and became more comfortable communicating my ideas publicly. Over time, I realized that communication is just as important as technical skills in a developer's journey.&lt;/p&gt;

&lt;p&gt;Alongside building projects, I also practiced JavaScript extensively through freeCodeCamp(&lt;a href="https://www.freecodecamp.org/" rel="noopener noreferrer"&gt;https://www.freecodecamp.org/&lt;/a&gt;). Their structured approach to learning helped me strengthen my fundamentals step by step. The combination of theory explanations, hands-on labs, quizzes, and practical projects made the learning process much more effective for me. Instead of only reading concepts, I was constantly applying them through coding exercises, which helped me understand JavaScript more clearly and build confidence through consistent practice.&lt;/p&gt;

&lt;p&gt;This is also how I first came across Google I/O. I learned about it through LinkedIn posts and emails related to the event and the writing challenge. It felt genuinely exciting to see developers around the world sharing ideas, innovations, and experiences through a global platform focused on technology and learning.&lt;/p&gt;

&lt;p&gt;Looking back, I now understand that real growth in development comes from building consistently, making mistakes, solving problems independently, exploring real-world projects, and engaging with the community.&lt;/p&gt;

&lt;p&gt;Tutorials can introduce concepts, but projects and practical experience are what truly develop understanding.&lt;/p&gt;

&lt;p&gt;I still consider myself a learner, but now I approach learning differently. Instead of focusing only on completing courses or watching videos, I focus on building, experimenting, and improving step by step through practice.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleiochallenge</category>
    </item>
    <item>
      <title>APIs for JS Explained</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Sat, 23 May 2026 10:03:51 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/apis-for-js-explained-4g09</link>
      <guid>https://dev.to/nikita_maharana_879884df2/apis-for-js-explained-4g09</guid>
      <description>&lt;p&gt;&lt;strong&gt;Application Programming Interface (API) :&lt;/strong&gt; It acts like a bridge between frontend and backend where backend sends the data to frontend by endpoints.&lt;br&gt;
 eg: Swiggy gets google location or netflix gets geolocation&lt;/p&gt;

&lt;p&gt;APIs are used for typically http request such as GET, POST, PUT, DELETE, etc... &lt;/p&gt;

&lt;p&gt;How to use APIs? &lt;br&gt;
 In olden times, we used to work with APIs using XHR(Xml Http Request), but now browsers have default method called fetch which also works XHR underneath. &lt;/p&gt;

&lt;p&gt;Fetch: Fetch is a web API (given by browers is called web api) which is used for http request. Fetch returns promise. Promise is an object which have three states (pending, fullfilled, rejected) and it describes eventual completion of asynchronous operation. &lt;/p&gt;

&lt;p&gt;Promises are resolved by then and catch blocks. Fullfilled state of a promise triggers then block and rejected state of a promise triggers catch block &lt;/p&gt;

&lt;p&gt;eg: fetch(url)&lt;br&gt;
      .then(function(res) {&lt;br&gt;
        //success code of a promise with "res" we can give any name response &lt;br&gt;
      })&lt;br&gt;
      .catch(function(err){&lt;br&gt;
        //rejected code of a promise with 'err' error&lt;br&gt;
      })&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Promises can be combined one after the other called promise chaining 
    eg: Promise
          .then(() =&amp;gt; newPromise)//what ever this promise returns another promise takes it and resolves it until all promises resolves it will chain called promise chaining like default of swich case 
          .then(() =&amp;gt; resolve)
          .catch(() =&amp;gt; catchLogic) 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>api</category>
      <category>beginners</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>DOM Explained</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Mon, 18 May 2026 11:12:35 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/dom-explained-5a0j</link>
      <guid>https://dev.to/nikita_maharana_879884df2/dom-explained-5a0j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Document Object Model&lt;/strong&gt;&lt;br&gt;
Browser provides a web API called 'document' which contains total style and struncture of the web page.&lt;/p&gt;

&lt;p&gt;browser has its own js engine called v8.....we might have seen when we click a button then color change automatically, or an alert comes etc....&lt;br&gt;
js changes html ... ... that means js changes html so it must need html code so that it can change or manipulate it... so browser puts all html into an object called document and js will take this document and change whatever it wants....&lt;/p&gt;

&lt;p&gt;we write in html == hi&lt;br&gt;
browser will create a document and write 'hi' js access document and changing to 'bye'&lt;br&gt;
but ultimate output is document...&lt;br&gt;
so user will see bye that's why js is powerful....&lt;/p&gt;

&lt;p&gt;JavaScript can access, change HTML/CSS by using document object.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**i. DOM Selection:** You can select html elements in javascript multiple ways. Most popular are
 **a. getElementsByTagName('tag'):** It returns an array of all the tag elements from HTML. 
  **b. getElementsByClassName('class'):** It returns an array of all the class named elements from HTML.
  **c. getElementById('id'):** It selects elements with specific id from HTML.
  **d. querySelector('queries'):** It is used to select an element based on query but it selects the first element that matches the query.
  **e. querySelectorAll:** It is used to select an element based on query but it selects all elements which matches the condition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;** ii. DOM Manipulation:**&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    **a. textContent:** textContent is used to access/ manaipulate the text inside an element.
    **b. innerText:** innerText is also used to access/manipulalte the text inside an element but it also considers CSS 

   **d. innerHTML:** innerHTML is used to access / change complete HTML code 

    **e. value:** value is used to access/change input valaues

    **f. classList/ className:** used to access/change class names

    **g. style:** style is used to access/change  style of an element

**iii. DOM Creation:** DOM Creation is used to create HTML elements using DOM. We can use methods "createELement" 
To attach the element we can use,
 append : it id used for appending multiple elements
 appendChild: it is used for appending single element 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>beginners</category>
      <category>html</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Array Destructuring Explained</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Thu, 14 May 2026 12:43:50 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/array-destructuring-explained-1o4o</link>
      <guid>https://dev.to/nikita_maharana_879884df2/array-destructuring-explained-1o4o</guid>
      <description>&lt;p&gt;&lt;strong&gt;Array Destructuring&lt;/strong&gt; means extracting values from arrays and assigning in a convenient way for unpacking array elements into distinct variables.&lt;/p&gt;

&lt;p&gt;or Simply, Array destructuring means taking values from an array and storing them into separate variables easily.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;e.g:1&lt;/strong&gt;&lt;br&gt;
let fruits = ["apple", "grapes", "orange"];&lt;br&gt;
let [first, second, third] = fruits;&lt;/p&gt;

&lt;p&gt;console.log(first);  //'apple'&lt;br&gt;
console.log(second); //'grapes'&lt;br&gt;
console.log(third);  //'orange'&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;e.g:2&lt;/strong&gt;&lt;br&gt;
Accessing by their index values&lt;/p&gt;

&lt;p&gt;let fruits = ["apple", "grapes", "orange"];&lt;br&gt;
let first = fruits[0];&lt;br&gt;
let second = fruits[1];&lt;br&gt;
let third = fruits[2];&lt;/p&gt;

&lt;p&gt;console.log(first); //'apple'&lt;br&gt;
console.log(second); //'grapes'&lt;br&gt;
console.log(third); //'orange'&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Rest Syntax:&lt;/strong&gt; It allows you to capture the remaining elements of an array that have not been destructured into a new array.It's denoted by three dots (...).&lt;br&gt;
e.g:&lt;br&gt;
let fruits = ["apple", "banana", "orange", "grapes", "kiwi"];&lt;br&gt;
let [first, second, ...rest] = fruits;&lt;/p&gt;

&lt;p&gt;console.log(first);  //'apple'&lt;br&gt;
console.log(second); //'banana'&lt;br&gt;
console.log(rest);   //['orange', 'grapes', 'kiwi']&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Explained Global, Local &amp; Block Scope in JavaScript</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Wed, 13 May 2026 16:54:13 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/explained-global-local-block-scope-in-javascript-25e9</link>
      <guid>https://dev.to/nikita_maharana_879884df2/explained-global-local-block-scope-in-javascript-25e9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Scope:&lt;/strong&gt; Scope generally means the visibility and accessibililty of variables in different parts of your code. Understanding of differnt types of scopes helps us write error free and clear code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Global Scope:&lt;/strong&gt;&lt;br&gt;
Global scope means the variable is having its accessibility anywhere in the program, inside function or blocks etc. But sometimes it leads to naming conflicts.&lt;br&gt;
e.g:&lt;br&gt;
let global = "I'm a global variable";&lt;br&gt;
function display(){&lt;br&gt;
    console.log(global);&lt;br&gt;
}&lt;br&gt;
display(); // "I'm a global variable"&lt;/p&gt;

&lt;p&gt;In this example, global is declared in the global scope and can be accessed inside the display function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local Scope:&lt;/strong&gt;&lt;br&gt;
The variables are only accessible within a function not outside of it.&lt;br&gt;
e.g:&lt;br&gt;
function local(){&lt;br&gt;
    var local = "I'm a local scope variable";&lt;br&gt;
    if (true){&lt;br&gt;
       console.log(local);// Works here also inside of if block&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Block Scope:&lt;/strong&gt;&lt;br&gt;
The variables are accessed within that block not outside of it.&lt;br&gt;
if (true) {&lt;br&gt;
    let block = "I'm a block variable";&lt;br&gt;
    console.log(block);// Works here inside of the block only&lt;br&gt;
}&lt;br&gt;
console.log(block);//it will throw an error&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's try to understand the difference between var, let and const based on Scopes
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;How to declare variables in JS?&lt;/strong&gt;&lt;br&gt;
We can declare variables in JS using var, let and const.&lt;/p&gt;

&lt;p&gt;A variable is like a container used to store a value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;var&lt;/strong&gt; is a function scoped variable which can be redeclared and reassigned.&lt;br&gt;
e.g: console.log("Nikita Maharana");&lt;br&gt;
var a = 25;&lt;br&gt;
var a = 3;//can redeclare using var in js&lt;br&gt;
a = 56;//reassigning is possible&lt;br&gt;
console.log(a);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;let&lt;/strong&gt; is a block scoped variable which can be reassigned but cannot be redeclared.&lt;br&gt;
e.g: let x = 9;&lt;br&gt;
// let x = 5;// cannot redeclare&lt;br&gt;
x = 78;//reassigning is also possible using let not re-declare&lt;br&gt;
console.log(x);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;const&lt;/strong&gt; is a block scoped variable which cannot be redeclared or reassigned.&lt;br&gt;
e.g: const y = 11;&lt;br&gt;
// const y = 22; cannot re-declare&lt;br&gt;
//y = 30;//re-assigning is not possible&lt;br&gt;
console.log(y);&lt;/p&gt;

&lt;p&gt;So, basically we can say...var is function scoped variable &amp;amp; let and const are block scoped variables.&lt;br&gt;
&lt;strong&gt;ex1:&lt;/strong&gt;&lt;br&gt;
function fun(){&lt;br&gt;
  if(true){&lt;br&gt;
    var a = 55;&lt;br&gt;
  }&lt;br&gt;
  console.log(a);//inside the fxn it will work everywhere&lt;br&gt;
}&lt;br&gt;
fun();&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ex2:&lt;/strong&gt;&lt;br&gt;
function fun(){&lt;br&gt;
  if(true){&lt;br&gt;
    var a = 55;let b = 34;const c = 34&lt;br&gt;
  }&lt;br&gt;
  console.log(a,b);//inside the fxn it will work everywhere b will not be printed&lt;br&gt;
  console.log(c);//c is block scoped it will not be printed&lt;br&gt;
}&lt;br&gt;
fun();&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>learning</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Array Functions Explained Simply</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Wed, 13 May 2026 15:20:37 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/array-functions-explained-simply-1eki</link>
      <guid>https://dev.to/nikita_maharana_879884df2/array-functions-explained-simply-1eki</guid>
      <description>&lt;p&gt;Array: Arrays are used to store elements. Array is a collection of elements. &lt;br&gt;
eg: let arr = [5, 44, 87, 9]&lt;br&gt;
arr[0] = 5;&lt;br&gt;
arr[1] = 44;&lt;/p&gt;

&lt;p&gt;length is a method of array which returns total no of elements in the array.&lt;/p&gt;

&lt;p&gt;//Arrays Methods: &lt;br&gt;
i. push: push is used to insert a value into the array as last value &lt;br&gt;
e.g: array.push(values)&lt;br&gt;
ii. pop(): pop is used to remove only the last value of the array&lt;br&gt;
eg: array.pop()&lt;/p&gt;

&lt;p&gt;iii. unshift : unshift is used to insert value or values into the array as first value&lt;br&gt;
e.g: array.unshift(values)&lt;/p&gt;

&lt;p&gt;iv. shift(): shift is used to remove only starting vlaue of the array&lt;br&gt;
eg: array.shift()&lt;/p&gt;

&lt;p&gt;v. splice: splice(starting_index, deleteCount, insertValues)&lt;br&gt;
It is used to delete any number of values or insert any number of values to the array&lt;br&gt;
 let arr = [5,4,6,7];&lt;br&gt;
 arr.splice(1,1)&lt;br&gt;
 arr.splice(1) -- will delete whole array from index 1&lt;br&gt;
 arr.splice(1, 2) -- will delete 2 values from index 1&lt;br&gt;
 arr.splice(1, 2, "shekhar") -- will delete 2 values from index 1 and add shkhar at index 1 &lt;/p&gt;

&lt;p&gt;vi. reverse is used to reverse the array.&lt;br&gt;
eg: array.reverse();&lt;br&gt;
arrays are mutable it changes the original array.&lt;/p&gt;

&lt;p&gt;vii. includes : includes is used to check whether the value is included in the array or not. &lt;/p&gt;

&lt;p&gt;viii. forEach(callback) : forEach is a method of arrays which accepts callback fxns as parameter and will apply the fxn to each and every element of array &lt;/p&gt;

&lt;p&gt;Syntax : forEach(value, index)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>learning</category>
      <category>developer</category>
    </item>
    <item>
      <title>Closure Explained in JS</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Wed, 13 May 2026 08:53:12 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/closure-explained-in-js-1f0j</link>
      <guid>https://dev.to/nikita_maharana_879884df2/closure-explained-in-js-1f0j</guid>
      <description>&lt;p&gt;Closure: An inner fxn remembers the outer fxn values even after outer fxn execution gets ended. &lt;/p&gt;

&lt;p&gt;We use this in techniques called memorization it means making code able to remember the previous input and its corresponding output such that it will not again calculate for same input. &lt;/p&gt;

&lt;p&gt;//CLosure&lt;br&gt;
function outer(){&lt;br&gt;
  var x = 25;&lt;br&gt;
  function inner() {&lt;br&gt;
    x++;//x is not in inner fxn its in outer but it remembers outer value that called memorization or closure&lt;br&gt;
    console.log(x);&lt;br&gt;
  }&lt;br&gt;
  return inner;&lt;br&gt;
}&lt;br&gt;
let result = outer();&lt;br&gt;
console.log(result);&lt;br&gt;
//it calls outer and outer returns inner so whole innner fxn returns&lt;br&gt;
//inner is not yet called so 26 will not be printed as it is seems&lt;/p&gt;

&lt;p&gt;result();//inner called 26&lt;br&gt;
result()//27&lt;br&gt;
result()//28 and so on...&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Callback Functions in JavaScript Explained</title>
      <dc:creator>Nikita Maharana</dc:creator>
      <pubDate>Wed, 13 May 2026 08:22:18 +0000</pubDate>
      <link>https://dev.to/nikita_maharana_879884df2/callback-functions-in-javascript-explained-3ija</link>
      <guid>https://dev.to/nikita_maharana_879884df2/callback-functions-in-javascript-explained-3ija</guid>
      <description>&lt;h1&gt;
  
  
  Callback Functions
&lt;/h1&gt;

&lt;p&gt;A callback function is a function which is passed as an argument to another function.&lt;/p&gt;

&lt;p&gt;e.g. function kind(){&lt;br&gt;
       console.log("I'm kind");&lt;br&gt;
     }&lt;br&gt;
    function rude(){&lt;br&gt;
       console.log("I'm rude");&lt;br&gt;
    }&lt;br&gt;
    function fun(a, b){&lt;br&gt;
       a();//calls kind()&lt;br&gt;
       b();//calls rude()&lt;br&gt;
    }&lt;br&gt;
    fun(kind, rude);&lt;/p&gt;

&lt;p&gt;//Output:&lt;br&gt;
   I'm kind&lt;br&gt;
   I'm rude&lt;/p&gt;

&lt;p&gt;Here, kind and rude are callback functions because they are passed as arguments to another function named as fun.&lt;br&gt;
And fun is called a higher order function because it accepts functions (kind and rude) as parameters.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
