<?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: Oluwatobi Sofela</title>
    <description>The latest articles on DEV Community by Oluwatobi Sofela (@oluwatobiss).</description>
    <link>https://dev.to/oluwatobiss</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%2F489414%2Fab307858-3fae-4f67-ae5a-d5206b24573c.jpg</url>
      <title>DEV Community: Oluwatobi Sofela</title>
      <link>https://dev.to/oluwatobiss</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oluwatobiss"/>
    <language>en</language>
    <item>
      <title>Latest Release: React YouTube Playlist v2</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Mon, 08 Jan 2024 20:28:21 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/latest-release-react-youtube-playlist-v2-22ch</link>
      <guid>https://dev.to/oluwatobiss/latest-release-react-youtube-playlist-v2-22ch</guid>
      <description>&lt;p&gt;&lt;a href="https://www.npmjs.com/package/@codesweetly/react-youtube-playlist" rel="noopener noreferrer"&gt;React YouTube Playlist&lt;/a&gt; version 2 is out! 🥳&lt;/p&gt;

&lt;p&gt;Let's discuss the highlights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Changes
&lt;/h2&gt;

&lt;p&gt;This release comes with one breaking change.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace default &lt;code&gt;import&lt;/code&gt; with named &lt;code&gt;import&lt;/code&gt;. This change provides better compatibility with Node and Babel-like tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other Changes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Replace EmotionJS dependency with inline styling.&lt;/li&gt;
&lt;li&gt;Convert all configuration files to TypeScript.&lt;/li&gt;
&lt;li&gt;Change the loading spinner's color to improve its contrast on dark and light background schemes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Update the React YouTube Playlist Package
&lt;/h2&gt;

&lt;p&gt;Here are the steps required to upgrade to the latest version:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install the latest version
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @codesweetly/react-youtube-playlist@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, you can use Yarn or pnpm like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn upgrade @codesweetly/react-youtube-playlist &lt;span class="nt"&gt;--latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm update @codesweetly/react-youtube-playlist &lt;span class="nt"&gt;--latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Update the package's &lt;code&gt;import&lt;/code&gt; syntax
&lt;/h3&gt;

&lt;p&gt;Replace the package's default &lt;code&gt;import&lt;/code&gt; statement with the named &lt;code&gt;import&lt;/code&gt; syntax like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- import YouTubePlaylist from "@codesweetly/react-youtube-playlist";
&lt;/span&gt;&lt;span class="gi"&gt;+ import { YouTubePlaylist } from "@codesweetly/react-youtube-playlist";
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Use the React YouTube Playlist Package
&lt;/h2&gt;

&lt;p&gt;See the &lt;a href="https://codesweetly.com/react-youtube-playlist" rel="noopener noreferrer"&gt;complete project-based guide&lt;/a&gt; to learn how to add the &lt;code&gt;YouTubePlaylist&lt;/code&gt; package to your React applications. You can use the library with Vite, NextJS, Remix, or any other React app.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Latest Release: React Image Grid Gallery v2</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Mon, 08 Jan 2024 18:48:45 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/latest-release-react-image-grid-gallery-v2-1nej</link>
      <guid>https://dev.to/oluwatobiss/latest-release-react-image-grid-gallery-v2-1nej</guid>
      <description>&lt;p&gt;&lt;a href="https://www.npmjs.com/package/react-image-grid-gallery" rel="noopener noreferrer"&gt;React Image Grid Gallery&lt;/a&gt; version 2 is out! 🥳&lt;/p&gt;

&lt;p&gt;Let's discuss the highlights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking Changes
&lt;/h2&gt;

&lt;p&gt;This release comes with two breaking changes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace default &lt;code&gt;import&lt;/code&gt; with named &lt;code&gt;import&lt;/code&gt;. This change provides better compatibility with Node and Babel-like tools.&lt;/li&gt;
&lt;li&gt;Rename &lt;code&gt;imgArray&lt;/code&gt; prop to &lt;code&gt;imagesInfoArray&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other Changes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Change compiler from Babel to TypeScript.&lt;/li&gt;
&lt;li&gt;Remove Babel dependency.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;uniqid&lt;/code&gt; dependency with &lt;code&gt;crypto.randomUUID&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Convert all configuration files to TypeScript.&lt;/li&gt;
&lt;li&gt;Replace external CSS with inline styling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Update the React Image Grid Gallery Package
&lt;/h2&gt;

&lt;p&gt;Here are the steps required to upgrade to the latest version:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install the latest version
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;react-image-grid-gallery@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, you can use Yarn or pnpm like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn upgrade react-image-grid-gallery &lt;span class="nt"&gt;--latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm update react-image-grid-gallery &lt;span class="nt"&gt;--latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Update the package's &lt;code&gt;import&lt;/code&gt; syntax
&lt;/h3&gt;

&lt;p&gt;Replace the package's default &lt;code&gt;import&lt;/code&gt; statement with the named &lt;code&gt;import&lt;/code&gt; syntax like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- import ImageGallery from "react-image-grid-gallery";
&lt;/span&gt;&lt;span class="gi"&gt;+ import { ImageGallery } from "react-image-grid-gallery";
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Update the package's props
&lt;/h3&gt;

&lt;p&gt;Update the required prop's name as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;  &amp;lt;ImageGallery
&lt;span class="gd"&gt;-    imgArray={imagesArray}
&lt;/span&gt;&lt;span class="gi"&gt;+    imagesInfoArray={imagesArray}
&lt;/span&gt;     columnWidth={230}
     gapSize={24}
  /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Note for Docusaurus Users
&lt;/h2&gt;

&lt;p&gt;Wrap the &lt;code&gt;ImageGallery&lt;/code&gt; component in &lt;a href="https://docusaurus.io/docs/next/advanced/ssg#browseronly" rel="noopener noreferrer"&gt;&lt;code&gt;&amp;lt;BrowserOnly&amp;gt;&lt;/code&gt;&lt;/a&gt; if you get a &lt;code&gt;ReferenceError: crypto is not defined&lt;/code&gt; error during your build step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&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;BrowserOnly&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@docusaurus/BrowserOnly&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;YourComponent&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="nc"&gt;BrowserOnly&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;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="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ImageGallery&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react-image-grid-gallery&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;ImageGallery&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ImageGallery&lt;/span&gt;
            &lt;span class="na"&gt;imagesInfoArray&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;imagesArray&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;columnWidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;230&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
            &lt;span class="na"&gt;gapSize&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;BrowserOnly&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;&amp;lt;BrowserOnly&amp;gt;&lt;/code&gt; component tells Docusaurus to render the &lt;code&gt;ImageGallery&lt;/code&gt; library only in the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This process is essential because the &lt;code&gt;ImageGallery&lt;/code&gt; package uses the Web Crypto API. Therefore, &lt;code&gt;BrowserOnly&lt;/code&gt; ensures that the Crypto API runs only in CSR (Client-Side Rendering) rather than during build or SSR (Server-Side Rendering).&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use the React Image Grid Gallery Package
&lt;/h2&gt;

&lt;p&gt;See the &lt;a href="https://codesweetly.com/react-image-grid-gallery" rel="noopener noreferrer"&gt;complete project-based guide&lt;/a&gt; to learn how to add the &lt;code&gt;ImageGallery&lt;/code&gt; package to your React applications. You can use the library with Vite, NextJS, Remix, or any other React app.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>JavaScript Closures Explained with Examples</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Mon, 08 Jan 2024 17:10:26 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/javascript-closures-explained-with-examples-fae</link>
      <guid>https://dev.to/oluwatobiss/javascript-closures-explained-with-examples-fae</guid>
      <description>&lt;p&gt;A &lt;strong&gt;closure&lt;/strong&gt; is an inner function referencing one or more items in its &lt;a href="https://codesweetly.com/javascript-lexical-scope" rel="noopener noreferrer"&gt;lexical scope&lt;/a&gt; (definition area).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; An inner function is a function defined inside a &lt;a href="https://codesweetly.com/code-block" rel="noopener noreferrer"&gt;block&lt;/a&gt;, &lt;a href="https://codesweetly.com/javascript-modules-tutorial" rel="noopener noreferrer"&gt;module&lt;/a&gt;, or another function.&lt;/p&gt;

&lt;p&gt;In other words, a closure is a function that retains access to its lexical scope's features even after its execution closes.&lt;/p&gt;

&lt;p&gt;For instance, consider the following 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;createProfile&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&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;showName&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;myName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;showName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;createProfile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesweetly.com/try-it-sdk/javascript/function/closures/js-z2eyrx" rel="noopener noreferrer"&gt;&lt;strong&gt;Try Editing It&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;showName()&lt;/code&gt; is the closure in the example above because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is an inner function.&lt;/li&gt;
&lt;li&gt;It retains a reference to its lexical scope's variable.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;createProfile()&lt;/code&gt; function's body is &lt;code&gt;showName()&lt;/code&gt;'s lexical scope.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;showName()&lt;/code&gt; function retained a reference to its lexical scope's &lt;a href="https://codesweetly.com/state-in-programming" rel="noopener noreferrer"&gt;state&lt;/a&gt; (variable's value) by calling &lt;code&gt;myName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The reason &lt;code&gt;showName()&lt;/code&gt; is a closure is not because it was returned nor invoked within &lt;code&gt;createProfile()&lt;/code&gt;. Instead, it is a closure because it is an inner function that retains a reference to its lexical scope's feature (that is, &lt;code&gt;myName&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;All closures have three scopes:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local scope:&lt;/strong&gt; The space within the closure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parent scope:&lt;/strong&gt; The space of the closure's block, module, or parent function. In other words, the parent scope is the outer/enclosing environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global scope:&lt;/strong&gt; The space containing all the scopes/code.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;So, now that we know what a closure is, we can discuss how browsers will process &lt;code&gt;createProfile()&lt;/code&gt;'s invocation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do Browsers Process a Closure's Lexical Scope's Invocation?
&lt;/h2&gt;

&lt;p&gt;Below is a walk-through of how JavaScript will process the &lt;code&gt;createProfile()&lt;/code&gt; function's invocation.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Allocate memory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// This is the createProfile() function's opening block&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first thing JavaScript does when browsers invoke &lt;code&gt;createProfile()&lt;/code&gt; is to allocate the memory it needs to process the function's invocation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Parse the variable's declaration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JavaScript's second task is to analyze &lt;code&gt;myName&lt;/code&gt;'s declaration, following the &lt;a href="https://codesweetly.com/javascript-hoisting" rel="noopener noreferrer"&gt;hoisting&lt;/a&gt; principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Parse the function's declaration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;showName&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 computer's third step is to analyze &lt;code&gt;showName()&lt;/code&gt;'s declaration, following the hoisting principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Initialize the variable
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&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;The computer initializes &lt;code&gt;myName&lt;/code&gt; with the &lt;code&gt;"Oluwatobi"&lt;/code&gt; string value, following the hoisting principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Return the invoked function's output
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;showName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fifth thing JavaScript does is to return &lt;code&gt;showName()&lt;/code&gt;'s output to the &lt;code&gt;createProfile()&lt;/code&gt; function.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Return the variable's content
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JavaScript returns the variable's value to the &lt;code&gt;showName()&lt;/code&gt; function's invocation.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Empty the allocated memory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// This is the createProfile() function's closing block&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The computer ends the &lt;code&gt;createProfile()&lt;/code&gt; function's execution and empties the allocated memory. Therefore, all the values JavaScript stored in &lt;code&gt;createProfile()&lt;/code&gt;'s allocated memory will vanish forever!&lt;/p&gt;

&lt;p&gt;So, what makes closures unique? Let's discuss this now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes Closures Unique?
&lt;/h2&gt;

&lt;p&gt;No external scope can access a function's data by default, but a closure's scope can.&lt;/p&gt;

&lt;p&gt;For instance, the snippet below returned an error because the global scope cannot access the &lt;code&gt;createProfile()&lt;/code&gt; function's space.&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;// Define the createProfile function:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createProfile&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Call myName variable:&lt;/span&gt;
&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// The call above will return:&lt;/span&gt;
&lt;span class="c1"&gt;// Uncaught ReferenceError: myName is not defined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesweetly.com/try-it-sdk/javascript/function/closures/js-ik7rqv" rel="noopener noreferrer"&gt;&lt;strong&gt;Try Editing It&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can, however, use closures to access &lt;code&gt;createProfile()&lt;/code&gt;'s scope from another environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's an example:&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="c1"&gt;// Define the createProfile function:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createProfile&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&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;showName&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;myName&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;showName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the createProfile and store its output in a variable:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createProfile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Check the content inside the firstName variable:&lt;/span&gt;
&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// The call above will return:&lt;/span&gt;
&lt;span class="c1"&gt;// function showName() {&lt;/span&gt;
&lt;span class="c1"&gt;//   return myName;&lt;/span&gt;
&lt;span class="c1"&gt;// }&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the function stored in the firstName variable:&lt;/span&gt;
&lt;span class="nf"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="c1"&gt;// "Oluwatobi"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesweetly.com/try-it-sdk/javascript/function/closures/js-2vkxrg" rel="noopener noreferrer"&gt;&lt;strong&gt;Try Editing It&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;createProfile()&lt;/code&gt; returned its inner function (the closure)—not the result of an invocation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; Since the &lt;code&gt;firstName&lt;/code&gt; variable contains only a function (&lt;code&gt;showName()&lt;/code&gt;), how did the &lt;code&gt;showName&lt;/code&gt; external function get access to &lt;code&gt;createProfile()&lt;/code&gt;'s variable?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; The reason the &lt;code&gt;firstName&lt;/code&gt; variable's function gained access to &lt;code&gt;createProfile()&lt;/code&gt;'s variable is because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The &lt;code&gt;firstName&lt;/code&gt; variable's function is a closure.&lt;/li&gt;
&lt;li&gt;Closures retain reference to their lexical scope's data—even after JavaScript has closed their definition space's execution.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's discuss the reasons above in more detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do Closures Retain Access to Their Lexical Scope's Features?
&lt;/h2&gt;

&lt;p&gt;Closures retain access to their lexical scope's features by storing referenced items in-memory.&lt;/p&gt;

&lt;p&gt;For instance, reconsider our previous example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the createProfile function:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createProfile&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&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;showName&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;myName&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;showName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke createProfile and store its output in a variable:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createProfile&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Check the content inside the firstName variable:&lt;/span&gt;
&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// The call above will return:&lt;/span&gt;
&lt;span class="c1"&gt;// function showName() {&lt;/span&gt;
&lt;span class="c1"&gt;//   return myName;&lt;/span&gt;
&lt;span class="c1"&gt;// }&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the function stored in the firstName variable:&lt;/span&gt;
&lt;span class="nf"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="c1"&gt;// "Oluwatobi"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesweetly.com/try-it-sdk/javascript/function/closures/js-2vkxrg" rel="noopener noreferrer"&gt;&lt;strong&gt;Try Editing It&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's is how the computer will analyze the snippet above:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Allocate memory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// This is the createProfile() function's opening block&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first thing JavaScript does when browsers invoke &lt;code&gt;createProfile()&lt;/code&gt; is to allocate the memory it needs to process the function's invocation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Parse the variable's declaration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;JavaScript's second task is to analyze &lt;code&gt;myName&lt;/code&gt;'s declaration, following the &lt;a href="https://codesweetly.com/javascript-hoisting" rel="noopener noreferrer"&gt;hoisting&lt;/a&gt; principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Parse the function's declaration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;showName&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 computer's third step is to analyze &lt;code&gt;showName()&lt;/code&gt;'s declaration, following the hoisting principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Initialize the variable
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&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;The computer initializes &lt;code&gt;myName&lt;/code&gt; with the &lt;code&gt;"Oluwatobi"&lt;/code&gt; string value, following the hoisting principles.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Return the function
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;showName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fifth thing JavaScript does is to return the &lt;code&gt;showName&lt;/code&gt; function to &lt;code&gt;createProfile()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note the following:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The computer will store the returned &lt;code&gt;showName&lt;/code&gt; function in the &lt;code&gt;firstName&lt;/code&gt; variable since that's where the &lt;code&gt;createProfile()&lt;/code&gt; invocator lives.&lt;/li&gt;
&lt;li&gt;JavaScript will also store &lt;code&gt;myName&lt;/code&gt;'s value in the &lt;code&gt;firstName&lt;/code&gt; variable's memory because &lt;code&gt;showName&lt;/code&gt; referenced it.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;firstName&lt;/code&gt; variable's copy of &lt;code&gt;showName&lt;/code&gt; and &lt;code&gt;myName&lt;/code&gt; are &lt;em&gt;new&lt;/em&gt; code instances the computer created during &lt;code&gt;createProfile()&lt;/code&gt;'s execution.&lt;/li&gt;
&lt;li&gt;Browsers will not run the &lt;code&gt;"return myName"&lt;/code&gt; code at this stage because we did not invoke &lt;code&gt;showName&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Empty the allocated memory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// This is the createProfile() function's closing block&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The computer ends the &lt;code&gt;createProfile()&lt;/code&gt; function's invocation and empties the allocated memory. Therefore, all the values JavaScript stored in &lt;code&gt;createProfile()&lt;/code&gt;'s allocated memory will vanish forever!&lt;/p&gt;

&lt;h3&gt;
  
  
  TLDR
&lt;/h3&gt;

&lt;p&gt;The main gist of the walk-through above is this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;const firstName = createProfile()&lt;/code&gt; statement made the computer do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invoke &lt;code&gt;createProfile()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Store the invocation's returned function in the &lt;code&gt;firstName&lt;/code&gt; variable.&lt;/li&gt;
&lt;li&gt;Store &lt;code&gt;myName&lt;/code&gt;'s current state (which &lt;code&gt;showName()&lt;/code&gt; referenced) in the &lt;code&gt;firstName&lt;/code&gt; variable's memory.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Therefore, here is what will happen whenever you invoke &lt;code&gt;firstName&lt;/code&gt;'s function:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Allocate memory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// This is the showName() function's opening block&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first thing JavaScript does when browsers invoke &lt;code&gt;showName()&lt;/code&gt; is to allocate the memory it needs to process the function's invocation.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Return the variable's content
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The computer analyzes the &lt;code&gt;return&lt;/code&gt; statement by doing the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It checks if there's a &lt;code&gt;myName&lt;/code&gt; variable definition locally within the &lt;code&gt;showName()&lt;/code&gt; function's local scope. But there's none, so the computer moves up to check the next scope—the &lt;code&gt;firstName&lt;/code&gt; variable's environment.&lt;/li&gt;
&lt;li&gt;JavaScript searches for &lt;code&gt;myName&lt;/code&gt; in the &lt;code&gt;firstName&lt;/code&gt; variable's memory. Fortunately, it found &lt;code&gt;myName&lt;/code&gt; there! Therefore, the computer gets &lt;code&gt;myName&lt;/code&gt;'s content (&lt;code&gt;"Oluwatobi"&lt;/code&gt;) and returns it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The computer found &lt;code&gt;myName&lt;/code&gt; in &lt;code&gt;firstName&lt;/code&gt;'s memory because JavaScript also stored all the data &lt;code&gt;showName()&lt;/code&gt; referenced while storing &lt;code&gt;showName&lt;/code&gt; inside &lt;code&gt;firstName&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Empty the allocated memory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// This is the showName() function's closing block&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The computer ends &lt;code&gt;showName()&lt;/code&gt;'s execution and empties the allocated memory. Therefore, all the values JavaScript stored in &lt;code&gt;showName()&lt;/code&gt;'s allocated memory will vanish forever!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;myName&lt;/code&gt; variable will persist even after the computer closes &lt;code&gt;showName()&lt;/code&gt;'s execution. This is because JavaScript stored &lt;code&gt;myName&lt;/code&gt; in &lt;code&gt;firstName&lt;/code&gt;'s memory—not inside &lt;code&gt;showName()&lt;/code&gt;'s memory.&lt;/li&gt;
&lt;li&gt;The computer will empty &lt;code&gt;firstName&lt;/code&gt;'s memory when it closes its scope's execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, now that we know how closures retain access to their lexical scope's features, we can discuss a few more examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example 1: Generate Prepublication Years
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the generateYear function:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateYear&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;publicationYear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2023&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;decreasePublicationYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;publicationYear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// The -- operator subtracts one from the publicationYear variable.&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;decreasePublicationYear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke generateYear and store its output in a variable:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prePublicationYear1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generateYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke another instance of generateYear and store its output in a variable:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prePublicationYear2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generateYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the function stored in the prePublicationYear1 variable:&lt;/span&gt;
&lt;span class="nf"&gt;prePublicationYear1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 2022&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the prePublicationYear1's function again:&lt;/span&gt;
&lt;span class="nf"&gt;prePublicationYear1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 2021&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the prePublicationYear1's function one more time:&lt;/span&gt;
&lt;span class="nf"&gt;prePublicationYear1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 2020&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the function stored inside the prePublicationYear2 variable:&lt;/span&gt;
&lt;span class="nf"&gt;prePublicationYear2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 2022&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesweetly.com/try-it-sdk/javascript/function/closures/js-gthfsz" rel="noopener noreferrer"&gt;&lt;strong&gt;Try Editing It&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The snippet above consistently returns a value that is one (1) less than the previous year because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JavaScript also stored all the data &lt;code&gt;decreasePublicationYear()&lt;/code&gt; referenced while storing &lt;code&gt;decreasePublicationYear&lt;/code&gt; inside &lt;code&gt;prePublicationYear&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;prePublicationYear&lt;/code&gt;'s copy of the &lt;code&gt;publicationYear&lt;/code&gt; variable remains accessible even after the computer closes &lt;code&gt;decreasePublicationYear()&lt;/code&gt;'s execution.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;prePublicationYear1&lt;/code&gt; and &lt;code&gt;prePublicationYear2&lt;/code&gt; have different versions of &lt;code&gt;generateYear()&lt;/code&gt;'s output because the computer creates new instances during each &lt;code&gt;generateYear()&lt;/code&gt;'s execution.&lt;/li&gt;
&lt;li&gt;The subtraction happens on &lt;code&gt;prePublicationYear&lt;/code&gt;'s copy of the &lt;code&gt;publicationYear&lt;/code&gt; variable—not on the one inside the &lt;code&gt;generateYear()&lt;/code&gt; function.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;--publicationYear&lt;/code&gt; code uses the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Decrement" rel="noopener noreferrer"&gt;decrement operator&lt;/a&gt; to subtract one from the &lt;code&gt;publicationYear&lt;/code&gt; variable and return the value after the decrement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 2: Generate the Multiple of a Constant
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the generateMultipleOfX function:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;generateMultipleOfX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;multiplyXByY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke generateMultipleOfX and store its output in a variable:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;multipleOfX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;generateMultipleOfX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the multipleOfX variable's function:&lt;/span&gt;
&lt;span class="nf"&gt;multipleOfX&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;// The invocation above will return: 6&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the multipleOfX variable's function again:&lt;/span&gt;
&lt;span class="nf"&gt;multipleOfX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 30&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the multipleOfX variable's function one more time:&lt;/span&gt;
&lt;span class="nf"&gt;multipleOfX&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;// The invocation above will return: 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesweetly.com/try-it-sdk/javascript/function/closures/js-84fhua" rel="noopener noreferrer"&gt;&lt;strong&gt;Try Editing It&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The snippet above consistently multiplies &lt;code&gt;multipleOfX&lt;/code&gt;'s argument by &lt;code&gt;3&lt;/code&gt; because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JavaScript also stored all the data &lt;code&gt;multiplyXByY()&lt;/code&gt; referenced while storing &lt;code&gt;multiplyXByY()&lt;/code&gt; inside the &lt;code&gt;multipleOfX&lt;/code&gt; variable. (In the instance above, &lt;code&gt;multiplyXByY&lt;/code&gt; referenced &lt;code&gt;3&lt;/code&gt; (parameter &lt;code&gt;x&lt;/code&gt;'s value)).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;multipleOfX&lt;/code&gt;'s copy of the value &lt;code&gt;3&lt;/code&gt; remains accessible even after the computer closes &lt;code&gt;multiplyXByY()&lt;/code&gt;'s execution.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;The multiplication happened on &lt;code&gt;multipleOfX&lt;/code&gt;'s copy of &lt;code&gt;generateMultipleOfX&lt;/code&gt;'s argument.&lt;/li&gt;
&lt;li&gt;Your closure can be an &lt;a href="https://codesweetly.com/web-tech-terms-a#anonymous-function" rel="noopener noreferrer"&gt;anonymous function&lt;/a&gt;. We named the ones above for ease of referencing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example 3: Create a Publication Year Calculator
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the publicationYearCalculator function:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;publicationYear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2023&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;updatePublicationYear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;publicationYear&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;addOne&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="nf"&gt;updatePublicationYear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;subtractOne&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="nf"&gt;updatePublicationYear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;defaultYear&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;publicationYear&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;

&lt;span class="c1"&gt;// Check the publicationYearCalculator variable's content:&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="c1"&gt;// {addOne: ƒ, subtractOne: ƒ, defaultYear: ƒ}&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke publicationYearCalculator's defaultYear() method:&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defaultYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 2023&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke publicationYearCalculator's addOne() method:&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addOne&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return "undefined" because&lt;/span&gt;
&lt;span class="c1"&gt;// we programmed addOne() to invoke updatePublicationYear()&lt;/span&gt;
&lt;span class="c1"&gt;// only rather than return the result of the invocation.&lt;/span&gt;
&lt;span class="c1"&gt;// So, addOne() will increment publicationYear by one but&lt;/span&gt;
&lt;span class="c1"&gt;// will not return any value.&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke publicationYearCalculator's defaultYear() method:&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defaultYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 2024&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke publicationYearCalculator's subtractOne() method thrice:&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subtractOne&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subtractOne&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subtractOne&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Similar to the addOne() invocation, the invocations above&lt;/span&gt;
&lt;span class="c1"&gt;// will return "undefined" because we programmed subtractOne()&lt;/span&gt;
&lt;span class="c1"&gt;// to invoke updatePublicationYear() only rather than return&lt;/span&gt;
&lt;span class="c1"&gt;// the invocation's result.&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke publicationYearCalculator's defaultYear() method:&lt;/span&gt;
&lt;span class="nx"&gt;publicationYearCalculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;defaultYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: 2021&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://codesweetly.com/try-it-sdk/javascript/function/closures/js-24htdf" rel="noopener noreferrer"&gt;&lt;strong&gt;Try Editing It&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;defaultYear()&lt;/code&gt; method remembers the &lt;code&gt;publicationYear&lt;/code&gt;'s updated state because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JavaScript also stored all the data &lt;code&gt;updatePublicationYear()&lt;/code&gt; referenced while storing &lt;code&gt;updatePublicationYear&lt;/code&gt;'s invocator inside the &lt;code&gt;publicationYearCalculator&lt;/code&gt; variable. (In the instance above, &lt;code&gt;updatePublicationYear&lt;/code&gt; referenced &lt;code&gt;publicationYear&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;publicationYearCalculator&lt;/code&gt;'s copy of &lt;code&gt;publicationYear&lt;/code&gt; remains accessible even after the computer closes &lt;code&gt;updatePublicationYear()&lt;/code&gt;'s execution.&lt;/li&gt;
&lt;li&gt;The calculation happened on &lt;code&gt;publicationYearCalculator&lt;/code&gt;'s copy of &lt;code&gt;publicationYear&lt;/code&gt;—not on the one inside the anonymous function.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Note the following:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;publicationYearCalculator&lt;/code&gt; variable's function is an &lt;a href="https://codesweetly.com/javascript-function-object#what-is-a-javascript-immediately-invoked-function-expression" rel="noopener noreferrer"&gt;Immediately Invoked Function Expression&lt;/a&gt; (IIFE).&lt;/li&gt;
&lt;li&gt;Developers use the term "&lt;a href="https://www.oreilly.com/library/view/learning-javascript-design/9781449334840/ch09s02.html" rel="noopener noreferrer"&gt;module pattern&lt;/a&gt;" to reference the neat organization of private and public features inside an &lt;a href="https://codesweetly.com/javascript-non-primitive-data-type" rel="noopener noreferrer"&gt;object&lt;/a&gt; (as we've done in the &lt;code&gt;publicationYearCalculator&lt;/code&gt;'s IIFE above).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;publicationYearCalculator&lt;/code&gt;'s IIFE contains two private and three public items.

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;publicationYear&lt;/code&gt; and &lt;code&gt;updatePublicationYear()&lt;/code&gt; are the private features.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;addOne()&lt;/code&gt;, &lt;code&gt;substractOne()&lt;/code&gt;, and &lt;code&gt;defaultYear()&lt;/code&gt; are the public items because they are part of the returned object.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Although private items are inaccessible outside their lexical scope, you can access them through the public closures—because they have access to in-memory copies of their referenced features even after JavaScript has closed the IIFE's execution.&lt;/li&gt;

&lt;li&gt;
&lt;code&gt;updatePublicationYear()&lt;/code&gt;, &lt;code&gt;addOne()&lt;/code&gt;, &lt;code&gt;substractOne()&lt;/code&gt;, and &lt;code&gt;defaultYear()&lt;/code&gt; are all closures because they are inner functions that reference some of their lexical scope's features.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Exposing only the code you wish to make globally available is recommended. Private code restricts unwarranted access and accidental conflict with other interfaces/namespaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;This article discussed what JavaScript closure is. We also used examples to see how it works.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Library is my name</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Tue, 17 Jan 2023 17:07:59 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/library-is-my-name-5cc9</link>
      <guid>https://dev.to/oluwatobiss/library-is-my-name-5cc9</guid>
      <description>&lt;p&gt;Hi 👋&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Library&lt;/strong&gt; is my name.&lt;/p&gt;

&lt;p&gt;I am a modular tool used as part of an app's add-on feature.&lt;/p&gt;

&lt;p&gt;In other words, I am like your cloth, which you use as an add-on feature on your body.&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%2Fsszolwb46qn7mdqup8nb.jpg" 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%2Fsszolwb46qn7mdqup8nb.jpg" alt="Framework depicted with a skeleton" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

Your cloth is your body's add-on feature. Similarly, a library is an app's add-on feature. (Image by Lothar Dieterich)




&lt;p&gt;Visit &lt;a href="https://codesweetly.com/framework-vs-library" rel="noopener noreferrer"&gt;CodeSweetly&lt;/a&gt; to find out more about me.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Framework is my name</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Tue, 10 Jan 2023 17:07:36 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/framework-is-my-name-38hk</link>
      <guid>https://dev.to/oluwatobiss/framework-is-my-name-38hk</guid>
      <description>&lt;p&gt;Hi 👋&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Framework&lt;/strong&gt; is my name.&lt;/p&gt;

&lt;p&gt;I am a ready-made skeletal structure used as your app's primary support system.&lt;/p&gt;

&lt;p&gt;In other words, I am like your skeleton—your body's primary support system.&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%2Fsszolwb46qn7mdqup8nb.jpg" 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%2Fsszolwb46qn7mdqup8nb.jpg" alt="Framework depicted with a skeleton" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

Your skeleton is your body's framework. Similarly, a framework is an app's skeleton. (Image by Lothar Dieterich)




&lt;p&gt;Visit &lt;a href="https://codesweetly.com/framework-vs-library" rel="noopener noreferrer"&gt;CodeSweetly&lt;/a&gt; to find out more about me.&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>CSS unit is my name</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Wed, 04 Jan 2023 18:05:17 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/css-unit-is-my-name-4n8c</link>
      <guid>https://dev.to/oluwatobiss/css-unit-is-my-name-4n8c</guid>
      <description>&lt;p&gt;Hi 👋&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS Unit&lt;/strong&gt; is my name. I am the standard of measurement used in CSS to express the size of an element's property.&lt;/p&gt;

&lt;p&gt;For instance, the snippet below used me to define the size of the &lt;code&gt;div&lt;/code&gt; element's &lt;code&gt;width&lt;/code&gt;—wherein &lt;code&gt;px&lt;/code&gt; is the unit, and &lt;code&gt;300&lt;/code&gt; is the number of &lt;code&gt;px&lt;/code&gt;s (pixels).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&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;
  
  
  About my children
&lt;/h2&gt;

&lt;p&gt;My children's names are relative and absolute length units.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Relative length unit&lt;/strong&gt; is a dynamic standard of measurement.&lt;/p&gt;

&lt;p&gt;You will often see her as a percentage (&lt;code&gt;%&lt;/code&gt;), element (&lt;code&gt;em&lt;/code&gt;), root element (&lt;code&gt;rem&lt;/code&gt;), or fraction (&lt;code&gt;fr&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Absolute length unit&lt;/strong&gt; is a fixed standard of measurement.&lt;/p&gt;

&lt;p&gt;You will often see him as pixels (&lt;code&gt;px&lt;/code&gt;), centimeters (&lt;code&gt;cm&lt;/code&gt;), millimeters(&lt;code&gt;mm&lt;/code&gt;), and inches (&lt;code&gt;in&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Visit &lt;a href="https://codesweetly.com/css-unit" rel="noopener noreferrer"&gt;CodeSweetly&lt;/a&gt; to find out more about us.&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>JavaScript is my name</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Fri, 30 Dec 2022 10:58:48 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/javascript-is-my-name-38ml</link>
      <guid>https://dev.to/oluwatobiss/javascript-is-my-name-38ml</guid>
      <description>&lt;p&gt;Hi 👋&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; is my name.&lt;/p&gt;

&lt;p&gt;My job is to command the elements of your document.&lt;/p&gt;

&lt;p&gt;Here's how I relate with my siblings 👇&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%2Fgmccj09cmv6ua2ziy0wa.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%2Fgmccj09cmv6ua2ziy0wa.png" alt="HTML describes data. CSS styles elements. JavaScript commands items" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codesweetly.com/html-css-javascript" rel="noopener noreferrer"&gt;Find out more about me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>CSS is my name</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Wed, 28 Dec 2022 21:10:51 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/css-is-my-name-3h2b</link>
      <guid>https://dev.to/oluwatobiss/css-is-my-name-3h2b</guid>
      <description>&lt;p&gt;Hi 👋&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS&lt;/strong&gt; is my name.&lt;/p&gt;

&lt;p&gt;My job is to style the elements of your HTML document.&lt;/p&gt;

&lt;p&gt;Here's a glimpse of how I relate with my siblings 👇&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%2Fgmccj09cmv6ua2ziy0wa.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%2Fgmccj09cmv6ua2ziy0wa.png" alt="HTML describes data. CSS styles elements. JavaScript commands items" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codesweetly.com/inline-vs-internal-vs-external-css" rel="noopener noreferrer"&gt;Find out more about me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>HTML is my name</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Tue, 27 Dec 2022 08:17:24 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/html-is-my-name-4ekb</link>
      <guid>https://dev.to/oluwatobiss/html-is-my-name-4ekb</guid>
      <description>&lt;p&gt;Hi 👋&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt; is my name.&lt;/p&gt;

&lt;p&gt;My job is to describe your document and its content.&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%2Fff0s3l2zqb76ir9tomcg.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%2Fff0s3l2zqb76ir9tomcg.png" alt="HTML annotates the content a web browser will display" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codesweetly.com/html-in-simple-terms" rel="noopener noreferrer"&gt;Find out more about me&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>html</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Arguments vs Parameters in JavaScript</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Tue, 11 Oct 2022 14:14:14 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/arguments-vs-parameters-in-javascript-33bo</link>
      <guid>https://dev.to/oluwatobiss/arguments-vs-parameters-in-javascript-33bo</guid>
      <description>&lt;p&gt;People often use arguments and parameters interchangeably, but they are different. So, let's discuss their differences.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the Difference between Arguments and Parameters?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Arguments&lt;/strong&gt; are the optional values you pass to a function through an invocator. And &lt;strong&gt;parameters&lt;/strong&gt; are the names you assign to the values.&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%2Fdcbridp2keat6tqza7e8.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%2Fdcbridp2keat6tqza7e8.png" alt="Arguments vs. parameters anatomy" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

  Arguments are values. Parameters are the names of the values.




&lt;h2&gt;
  
  
  Syntax of Arguments vs. Parameters
&lt;/h2&gt;

&lt;p&gt;We specify parameters and arguments in the parentheses that follow your function's name. Here's the syntax:&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;nameOfFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;parameter1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parameter2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// function's body&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;nameOfFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;argument1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;argument2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example of Arguments vs. Parameters
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define a function with two parameters:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bestColors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;second&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;first&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;second&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the bestColors() function with two arguments:&lt;/span&gt;
&lt;span class="nf"&gt;bestColors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;White&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return: "White Blue"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the snippet above, &lt;code&gt;"White"&lt;/code&gt; and &lt;code&gt;"Blue"&lt;/code&gt; are the arguments (values) we passed to the function's &lt;code&gt;first&lt;/code&gt; and &lt;code&gt;second&lt;/code&gt; parameters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Important Stuff to Know about Arguments and Parameters
&lt;/h2&gt;

&lt;p&gt;Here are two essential facts to remember when using JavaScript arguments and parameters.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Arguments and parameters are optional
&lt;/h3&gt;

&lt;p&gt;Arguments and parameters are optional components of a function. In other words, you can omit the parameters if your function won't use any argument.&lt;/p&gt;

&lt;p&gt;For instance, JavaScript's &lt;a href="https://codesweetly.com/javascript-string-trim-method" rel="noopener noreferrer"&gt;&lt;code&gt;trim()&lt;/code&gt;&lt;/a&gt; method has no parameter because it takes no arguments.&lt;/p&gt;

&lt;p&gt;On the other hand, &lt;a href="https://codesweetly.com/javascript-string-match-method" rel="noopener noreferrer"&gt;&lt;code&gt;match()&lt;/code&gt;&lt;/a&gt; has a single parameter that accepts one argument.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Arguments vs. &lt;code&gt;arguments&lt;/code&gt; object
&lt;/h3&gt;

&lt;p&gt;JavaScript automatically adds an &lt;a href="https://codesweetly.com/array-vs-array-like-objects" rel="noopener noreferrer"&gt;array-like&lt;/a&gt; object (called &lt;code&gt;arguments&lt;/code&gt;) to every non-&lt;a href="https://codesweetly.com/javascript-function-object#what-is-a-javascript-arrow-function-expression" rel="noopener noreferrer"&gt;arrow function&lt;/a&gt; you define.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;arguments&lt;/code&gt; object stores all the arguments (values) you pass to your function's parameter.&lt;/p&gt;

&lt;p&gt;In other words, JavaScript will put each value (argument) you pass to your function's parameter into the function's built-in &lt;code&gt;arguments&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's an example:&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="c1"&gt;// Define a function with two parameters:&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;bestColors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;second&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;arguments&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Invoke the bestColors() function with two arguments:&lt;/span&gt;
&lt;span class="nf"&gt;bestColors&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;White&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;White&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;// Note: Some browser's returned value may look like so:&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;White&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;bestColors()&lt;/code&gt; returned an array-like object having the values we passed to its parameters because we programmed it to return its built-in &lt;code&gt;arguments&lt;/code&gt; object's content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;Arguments are the values users pass to a function's parameters. &lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks for reading
&lt;/h2&gt;

&lt;p&gt;I hope you've found this article helpful. Please, feel free to reach out if you have any questions.&lt;/p&gt;

&lt;p&gt;You can also visit my &lt;a href="https://codesweetly.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt; for more articles like this.&lt;/p&gt;

&lt;p&gt;Want to connect? Follow me on &lt;a href="https://twitter.com/oluwatobiss" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Destructuring Array: How Does Destructuring Work in JS?</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Mon, 27 Sep 2021 01:13:21 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/destructuring-array-how-does-destructuring-work-in-js-5ca8</link>
      <guid>https://dev.to/oluwatobiss/destructuring-array-how-does-destructuring-work-in-js-5ca8</guid>
      <description>&lt;p&gt;The &lt;strong&gt;destructuring array assignment&lt;/strong&gt; is a unique technique you can use to copy an array’s value into new variables neatly.&lt;/p&gt;

&lt;p&gt;For instance, without using the destructuring assignment technique, we would copy an array’s value into a new variable like so:&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;profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;profile&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="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;profile&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;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Oluwatobi"&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;lastName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Sofela"&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;website&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "codesweetly.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-mrqjsu?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice that the snippet above has a lot of repeated code which is not a DRY (&lt;strong&gt;D&lt;/strong&gt;on’t &lt;strong&gt;R&lt;/strong&gt;epeat &lt;strong&gt;Y&lt;/strong&gt;ourself) way of coding.&lt;/p&gt;

&lt;p&gt;Let’s now see how the destructuring assignment makes things neater and DRY.&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;profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;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;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Oluwatobi"&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;lastName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Sofela"&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;website&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "codesweetly.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-uxrjek?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You see, like magic, we’ve cleaned up our code by encasing the three new variables (that is, &lt;code&gt;firstName&lt;/code&gt;, &lt;code&gt;lastName&lt;/code&gt;, and &lt;code&gt;website&lt;/code&gt;) into an array object (&lt;code&gt;[...]&lt;/code&gt;). Then, we assigned them the &lt;code&gt;profile&lt;/code&gt; array’s values.&lt;/p&gt;

&lt;p&gt;In other words, we instructed the computer to copy the &lt;code&gt;profile&lt;/code&gt; array’s values into the variables on the left-hand side of the &lt;a href="https://www.codesweetly.com/javascript-expression#types-of-expressions-in-javascript" rel="noopener noreferrer"&gt;assignment operator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Therefore, JavaScript will parse the &lt;code&gt;profile&lt;/code&gt; array and copy its first value (&lt;code&gt;“Oluwatobi”&lt;/code&gt;) into the destructuring array’s first variable (&lt;code&gt;firstName&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Likewise, the computer will copy the &lt;code&gt;profile&lt;/code&gt; array’s second value (&lt;code&gt;“Sofela”&lt;/code&gt;) into the destructuring array’s second variable (&lt;code&gt;lastName&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Lastly, JavaScript will copy the &lt;code&gt;profile&lt;/code&gt; array’s third value (&lt;code&gt;“codesweetly.com”&lt;/code&gt;) into the destructuring array’s third variable (&lt;code&gt;website&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Notice the snippet above destructured the &lt;code&gt;profile&lt;/code&gt; array by referencing it. However, we can also do direct destructuring of an array. Let’s see how below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to do direct array destructuring
&lt;/h2&gt;

&lt;p&gt;JavaScript permits direct destructuring of an array.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s an example:&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;website&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Oluwatobi"&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;lastName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Sofela"&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;website&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "codesweetly.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-rndtx5?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suppose you prefer to separate your variable declarations from their assignments. In that case, JavaScript has you covered. Let see how below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the destructuring assignment while separating variable declarations from their assignments
&lt;/h2&gt;

&lt;p&gt;Whenever you use the destructuring assignment, JavaScript allows you to separate your variable declarations from their assignments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s an example:&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;let&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;website&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Oluwatobi"&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;lastName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Sofela"&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;website&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "codesweetly.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-nm1ng3?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What if you want &lt;code&gt;“Oluwatobi”&lt;/code&gt; assigned to the &lt;code&gt;firstName&lt;/code&gt; variable — and the rest of the array items to another variable? How can such be accomplished? Let’s find out below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the destructuring assignment to assign the rest of an array to a variable
&lt;/h2&gt;

&lt;p&gt;JavaScript allows you to use the &lt;a href="https://www.codesweetly.com/javascript-rest-operator" rel="noopener noreferrer"&gt;rest operator&lt;/a&gt; within a destructuring array to assign the rest of a regular array to a variable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s an example:&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;otherInfo&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Oluwatobi"&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;otherInfo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ["Sofela", "codesweetly.com"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-w15axc?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Always use the rest operator as the last item of your destructuring array to avoid getting a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError" rel="noopener noreferrer"&gt;SyntaxError&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, what if you only want to extract &lt;code&gt;“codesweetly.com”&lt;/code&gt;. In that case, you can also use the destructuring assignment. Let’s find out how below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the destructuring assignment to copy values at any index
&lt;/h2&gt;

&lt;p&gt;You can use destructuring to copy values at any index of an array like so:&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="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;website&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;website&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "codesweetly.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-311nkt?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the snippet above, we used commas to skip variables at the destructuring array’s first and second index positions. By so doing, we were able to link the &lt;code&gt;website&lt;/code&gt; variable to the third index value of the regular array on the right-hand of the assignment operator (that is, &lt;code&gt;“codesweetly.com”&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;At times, however, the value you wish to extract from an array is &lt;code&gt;undefined&lt;/code&gt;. In that case, JavaScript provides a way to set default values in the destructuring array. Let’s learn more about this below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How default values work in a destructuring assignment
&lt;/h2&gt;

&lt;p&gt;Setting a default value can be handy when the value you wish to extract from an array does not exist (or is set to &lt;code&gt;undefined&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Here’s how you can set one inside a destructuring array:&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;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CodeSweetly&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&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;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Oluwatobi"&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;website&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "CodeSweetly"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-r38k67?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the snippet above, we set &lt;code&gt;“Tobi”&lt;/code&gt; and &lt;code&gt;“CodeSweetly”&lt;/code&gt; as the default values of the &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;website&lt;/code&gt; variables.&lt;/p&gt;

&lt;p&gt;Therefore, in our attempt to extract the first index value from the right-hand side array, the computer defaulted to &lt;code&gt;“CodeSweetly”&lt;/code&gt; — because only a zeroth index value exists in &lt;code&gt;["Oluwatobi"]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So, what if you need to swap &lt;code&gt;firstName&lt;/code&gt;’s value with that of &lt;code&gt;website&lt;/code&gt;? Again, you can use the destructuring assignment to do so. Let’s see how below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the destructuring assignment to swap values
&lt;/h2&gt;

&lt;p&gt;You can use the destructuring assignment to swap the values of two different variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s an example:&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;let&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;website&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CodeSweetly&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;website&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;website&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;firstName&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;firstName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "CodeSweetly"&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;website&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Oluwatobi"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://stackblitz.com/edit/web-platform-fu7phn?file=script.js" rel="noopener noreferrer"&gt;&lt;strong&gt;Try it on StackBlitz&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The snippet above instructed the computer to reassign the &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;website&lt;/code&gt; variables by swapping their values.&lt;/p&gt;

&lt;p&gt;As such, &lt;code&gt;firstName&lt;/code&gt;’s value will change from &lt;code&gt;"Oluwatobi"&lt;/code&gt; to &lt;code&gt;"CodeSweetly"&lt;/code&gt;. While &lt;code&gt;website&lt;/code&gt;’s content will change from &lt;code&gt;"CodeSweetly"&lt;/code&gt; to &lt;code&gt;"Oluwatobi"&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples of other ways to use the destructuring array
&lt;/h2&gt;

&lt;p&gt;See the resources below for examples of other ways to use the destructuring assignment to copy an array’s value into new variables neatly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Parsing_an_array_returned_from_a_function" rel="noopener noreferrer"&gt;Parsing an array returned from a function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Unpacking_values_from_a_regular_expression_match" rel="noopener noreferrer"&gt;Unpacking values from a regular expression match&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;This article discussed how the destructuring assignment works with JavaScript arrays. We also used examples to understand various ways of destructuring array literals.&lt;/p&gt;

&lt;p&gt;Now that we know how destructuring array works, let's discuss destructuring object &lt;a href="https://www.codesweetly.com/destructuring-object/" rel="noopener noreferrer"&gt;here&lt;/a&gt; so we can see the differences.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
      <category>coding</category>
    </item>
    <item>
      <title>Spread Operator: How Spread Works in JavaScript</title>
      <dc:creator>Oluwatobi Sofela</dc:creator>
      <pubDate>Fri, 27 Aug 2021 23:16:16 +0000</pubDate>
      <link>https://dev.to/oluwatobiss/spread-operator-how-spread-works-in-javascript-4fdn</link>
      <guid>https://dev.to/oluwatobiss/spread-operator-how-spread-works-in-javascript-4fdn</guid>
      <description>&lt;p&gt;The &lt;strong&gt;spread operator&lt;/strong&gt; (&lt;code&gt;...&lt;/code&gt;) is a syntax that helps to expand iterables into individual elements.&lt;/p&gt;

&lt;p&gt;The spread syntax serves within &lt;em&gt;array literals&lt;/em&gt;, &lt;em&gt;function calls&lt;/em&gt;, and &lt;em&gt;initialized properties object&lt;/em&gt; to spread the values of &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Iterables" rel="noopener noreferrer"&gt;iterable objects&lt;/a&gt; into separate items.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A spread syntax is effective only when used within array literals, function calls, or initialized properties objects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, what exactly does this mean? Let’s see with some examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spread Example 1: How spread works in an array literal
&lt;/h2&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;is&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aboutMe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="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;aboutMe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;is&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name.&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;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-rd1npd?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The snippet above used spread (&lt;code&gt;...&lt;/code&gt;) to copy &lt;code&gt;myName&lt;/code&gt; array into &lt;code&gt;aboutMe&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Alterations to &lt;code&gt;myName&lt;/code&gt; will not reflect in &lt;code&gt;aboutMe&lt;/code&gt; because all the values inside &lt;code&gt;myName&lt;/code&gt; are &lt;a href="https://www.codesweetly.com/web-tech-glossary#primitive-data-js" rel="noopener noreferrer"&gt;primitives&lt;/a&gt;. Therefore, the spread operator simply copied and pasted &lt;code&gt;myName&lt;/code&gt;’s content into &lt;code&gt;aboutMe&lt;/code&gt; without creating any reference back to the original array.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As mentioned by &lt;a class="mentioned-user" href="https://dev.to/nombrekeff"&gt;@nombrekeff&lt;/a&gt; in the comment section, the spread operator &lt;em&gt;only&lt;/em&gt; does shallow copy. So, keep in mind that supposing &lt;code&gt;myName&lt;/code&gt; contained any &lt;a href="https://www.codesweetly.com/web-tech-glossary#non-primitive-data-js" rel="noopener noreferrer"&gt;non-primitive&lt;/a&gt; value, the computer would have created a reference between &lt;code&gt;myName&lt;/code&gt; and &lt;code&gt;aboutMe&lt;/code&gt;. See info 3 for more on how the spread operator works with primitive and non-primitive values.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Suppose we did not use the spread syntax to duplicate &lt;code&gt;myName&lt;/code&gt;’s content. For instance, if we had written &lt;code&gt;const aboutMe = ["Oluwatobi", myName, "name."]&lt;/code&gt;. In such a case, the computer would have assigned a reference back to &lt;code&gt;myName&lt;/code&gt;. As such, any change made in the original array would reflect in the duplicated one.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Spread Example 2: How to use spread to convert a string into individual array items
&lt;/h2&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi Sofela&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;myName&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;O&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;l&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;u&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;w&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;t&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;i&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;S&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;o&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;f&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;l&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a&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;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-axvtye?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the snippet above, we used the spread syntax (&lt;code&gt;...&lt;/code&gt;) within an array literal object (&lt;code&gt;[...]&lt;/code&gt;) to expand &lt;code&gt;myName&lt;/code&gt;’s string value into individual items.&lt;/p&gt;

&lt;p&gt;As such, &lt;code&gt;"Oluwatobi Sofela"&lt;/code&gt; got expanded into &lt;code&gt;[ "O", "l", "u", "w", "a", "t", "o", "b", "i", " ", "S", "o", "f", "e", "l", "a" ]&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spread Example 3: How the spread operator works in a function call
&lt;/h2&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;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&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;addNumbers&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;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;addNumbers&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="mi"&gt;16&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-nrn8f3?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the snippet above, we used the spread syntax to spread the &lt;code&gt;numbers&lt;/code&gt; array’s content across &lt;code&gt;addNumbers()&lt;/code&gt;’s parameters.&lt;/p&gt;

&lt;p&gt;Suppose the &lt;code&gt;numbers&lt;/code&gt; array had more than four items. In such a case, the computer will only use the first four items as &lt;code&gt;addNumbers()&lt;/code&gt; argument and ignore the rest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s an example:&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;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;7&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="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;59&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;addNumbers&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;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;d&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;addNumbers&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="mi"&gt;16&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-ef3ncm?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s another example:&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi Sofela&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;spellName&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;c&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;spellName&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;      &lt;span class="c1"&gt;// returns: "Olu"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;spellName&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;   &lt;span class="c1"&gt;// returns: "wundefinedundefined"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;spellName&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;]));&lt;/span&gt;    &lt;span class="c1"&gt;// returns: "O,l,u,w,a,t,o,b,i, ,S,o,f,e,l,aundefinedundefined"&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;spellName&lt;/span&gt;&lt;span class="p"&gt;({...&lt;/span&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;}));&lt;/span&gt;    &lt;span class="c1"&gt;// returns: "[object Object]undefinedundefined"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-pkrxjd?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Spread Example 4: How spread works in an object literal
&lt;/h2&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;myNames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bio&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;myNames&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;runs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;bio&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;runs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-qnmxsu?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the snippet above, we used spread inside the &lt;code&gt;bio&lt;/code&gt; object to expand &lt;code&gt;myNames&lt;/code&gt; values into individual properties.&lt;/p&gt;

&lt;h2&gt;
  
  
  Important stuff to know about the spread operator
&lt;/h2&gt;

&lt;p&gt;Keep these two essential pieces of info in mind whenever you choose to use the spread operator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Info 1: Spread operators can’t expand object literal’s values
&lt;/h3&gt;

&lt;p&gt;Since a properties object is not an &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Iterables" rel="noopener noreferrer"&gt;iterable object&lt;/a&gt;, you cannot use the spread syntax to expand its values.&lt;/p&gt;

&lt;p&gt;However, you can use the &lt;em&gt;spread operator&lt;/em&gt; to clone &lt;em&gt;properties&lt;/em&gt; from one object into another.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s an example:&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bio&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;myName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;website&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;bio&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;website&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-psnsa8?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The snippet above used the spread operator to clone &lt;code&gt;myName&lt;/code&gt;’s content into the &lt;code&gt;bio&lt;/code&gt; object.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The spread operator can expand &lt;em&gt;iterable objects&lt;/em&gt;’ values only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An object is iterable only if it (or any object in its prototype chain) has a property with a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol" rel="noopener noreferrer"&gt;@@iterator&lt;/a&gt; key.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator" rel="noopener noreferrer"&gt;Array&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator" rel="noopener noreferrer"&gt;TypedArray&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/@@iterator" rel="noopener noreferrer"&gt;String&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/@@iterator" rel="noopener noreferrer"&gt;Map&lt;/a&gt;, and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/@@iterator" rel="noopener noreferrer"&gt;Set&lt;/a&gt; are all built-in iterable types because they have the &lt;code&gt;@@iterator&lt;/code&gt; property by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A properties object is not an iterable &lt;a href="https://www.codesweetly.com/document-vs-data-vs-code" rel="noopener noreferrer"&gt;data&lt;/a&gt; type because it does not have the &lt;code&gt;@@iterator&lt;/code&gt; property by default.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator#user-defined_iterables" rel="noopener noreferrer"&gt;make a properties object iterable&lt;/a&gt; by adding &lt;code&gt;@@iterator&lt;/code&gt; onto it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Info 2: The spread operator does not clone identical properties
&lt;/h3&gt;

&lt;p&gt;Suppose you used the spread operator to clone properties from object A into object B. And suppose object B contains properties identical to those in object A. In such a case, B’s versions will override those inside A.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s an example:&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bio&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;myName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;website&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;bio&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;website&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;codesweetly.com&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;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-gjhjue?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Observe that the spread operator did not copy &lt;code&gt;myName&lt;/code&gt;’s &lt;code&gt;firstName&lt;/code&gt; property into the &lt;code&gt;bio&lt;/code&gt; object because &lt;code&gt;bio&lt;/code&gt; already contains a &lt;code&gt;firstName&lt;/code&gt; property.&lt;/p&gt;

&lt;h3&gt;
  
  
  Info 3: Beware of how spread works when used on objects containing non-primitives!
&lt;/h3&gt;

&lt;p&gt;Suppose you used the spread operator on an object (or array) containing &lt;em&gt;only&lt;/em&gt; &lt;a href="https://www.codesweetly.com/web-tech-glossary#primitive-data-js" rel="noopener noreferrer"&gt;primitive values&lt;/a&gt;. The computer &lt;em&gt;will not&lt;/em&gt; create any reference between the original object and the duplicated one.&lt;/p&gt;

&lt;p&gt;For instance, consider this code below:&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;is&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aboutMe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="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;aboutMe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;is&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name.&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;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-rd1npd?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Observe that every item in &lt;code&gt;myName&lt;/code&gt; is a primitive value. Therefore, when we used the spread operator to clone &lt;code&gt;myName&lt;/code&gt; into &lt;code&gt;aboutMe&lt;/code&gt;, the computer &lt;em&gt;did not&lt;/em&gt; create any reference between the two arrays.&lt;/p&gt;

&lt;p&gt;As such, any alteration you make to &lt;code&gt;myName&lt;/code&gt; &lt;em&gt;will not&lt;/em&gt; reflect in &lt;code&gt;aboutMe&lt;/code&gt;, and vice versa.&lt;/p&gt;

&lt;p&gt;Take for an example, let’s add more content to &lt;code&gt;myName&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;real&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;Now, let’s check the current state of &lt;code&gt;myName&lt;/code&gt; and &lt;code&gt;aboutMe&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="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;myName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ["Sofela", "is", "my", "real"]&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;aboutMe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ["Oluwatobi", "Sofela", "is", "my", "name."]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-ujs6ny?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Notice that &lt;code&gt;myName&lt;/code&gt;’s updated content &lt;em&gt;did not&lt;/em&gt; reflect in &lt;code&gt;aboutMe&lt;/code&gt; — because spread created no reference between the original array and the duplicated one.&lt;/p&gt;

&lt;h4&gt;
  
  
  What if &lt;code&gt;myName&lt;/code&gt; contains non-primitive items?
&lt;/h4&gt;

&lt;p&gt;Suppose &lt;code&gt;myName&lt;/code&gt; contained &lt;a href="https://www.codesweetly.com/web-tech-glossary#non-primitive-data-js" rel="noopener noreferrer"&gt;non-primitives&lt;/a&gt;. In that case, spread &lt;em&gt;will&lt;/em&gt; create a reference between the original non-primitive and the cloned one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is an example:&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;is&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aboutMe&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="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;aboutMe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// The invocation above will return:&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;is&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name.&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;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-ombp5w?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Observe that &lt;code&gt;myName&lt;/code&gt; contains a non-primitive value.&lt;/p&gt;

&lt;p&gt;Therefore, using the spread operator to clone &lt;code&gt;myName&lt;/code&gt;’s content into &lt;code&gt;aboutMe&lt;/code&gt; caused the computer to create a reference between the two arrays.&lt;/p&gt;

&lt;p&gt;As such, any alteration you make to &lt;code&gt;myName&lt;/code&gt;’s copy will reflect in &lt;code&gt;aboutMe&lt;/code&gt;’s version, and vice versa.&lt;/p&gt;

&lt;p&gt;Take for an example, let’s add more content to &lt;code&gt;myName&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;myName&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="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;real&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;Now, let’s check the current state of &lt;code&gt;myName&lt;/code&gt; and &lt;code&gt;aboutMe&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="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;myName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [["Sofela", "is", "my", "real"]]&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;aboutMe&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ["Oluwatobi", ["Sofela", "is", "my", "real"], "name."]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-qpyy8n?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Notice that &lt;code&gt;myName&lt;/code&gt;’s updated content is reflected in &lt;code&gt;aboutMe&lt;/code&gt; — because spread created a reference between the original array and the duplicated one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s another example:&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bio&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;myName&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tobi&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;myName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { firstName: "Tobi", lastName: "Sofela" }&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;bio&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { firstName: "Oluwatobi", lastName: "Sofela" }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-tbmtgm?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the snippet above, &lt;code&gt;myName&lt;/code&gt;’s update &lt;em&gt;did not&lt;/em&gt; reflect in &lt;code&gt;bio&lt;/code&gt; because we used the spread operator on an object that contains primitive values &lt;em&gt;only&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A developer would call &lt;code&gt;myName&lt;/code&gt; a &lt;strong&gt;shallow object&lt;/strong&gt; because it contains only primitive items.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Here’s one more example:&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;myName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="na"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Oluwatobi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sofela&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bio&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;myName&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;myName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fullName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tobi&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;myName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { fullName: { firstName: "Tobi", lastName: "Sofela" } }&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;bio&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// { fullName: { firstName: "Tobi", lastName: "Sofela" } }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;a href="https://stackblitz.com/edit/web-platform-9uce9g?file=script.js" rel="noopener noreferrer"&gt;Try it on StackBlitz&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the snippet above, &lt;code&gt;myName&lt;/code&gt;’s update is reflected in &lt;code&gt;bio&lt;/code&gt; because we used the spread operator on an object that contains a non-primitive value.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A developer would call &lt;code&gt;myName&lt;/code&gt; a &lt;strong&gt;deep object&lt;/strong&gt; because it contains a non-primitive item.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You do &lt;strong&gt;shallow copy&lt;/strong&gt; when you create references while cloning one object into another. For instance, &lt;code&gt;...myName&lt;/code&gt; produces a shallow copy of the &lt;code&gt;myName&lt;/code&gt; object because whatever alteration you make in one will reflect in the other.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You do &lt;strong&gt;deep copy&lt;/strong&gt; when you clone objects without creating references. For instance, I could deep copy &lt;code&gt;myName&lt;/code&gt; into &lt;code&gt;bio&lt;/code&gt; by doing &lt;code&gt;const bio = JSON.parse(JSON.stringify(myName))&lt;/code&gt;. By so doing, the computer will clone &lt;code&gt;myName&lt;/code&gt; into &lt;code&gt;bio&lt;/code&gt; without creating any reference.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can break off the reference between the two objects by replacing the &lt;code&gt;fullName&lt;/code&gt; object inside &lt;code&gt;myName&lt;/code&gt; or &lt;code&gt;bio&lt;/code&gt; with a new object. For instance, doing &lt;code&gt;myName.fullName = { firstName: "Tobi", lastName: "Sofela" }&lt;/code&gt; would disconnect the pointer between &lt;code&gt;myName&lt;/code&gt; and &lt;code&gt;bio&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Wrapping it up
&lt;/h2&gt;

&lt;p&gt;This article discussed what the spread operator is. We also looked at how spread works in array literals, function calls, and object literals.&lt;/p&gt;

&lt;p&gt;Now that we know how spread works, let’s discuss the &lt;strong&gt;rest&lt;/strong&gt; operator in &lt;a href="https://www.codesweetly.com/javascript-rest-operator/" rel="noopener noreferrer"&gt;this article&lt;/a&gt; so we can see the differences.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
