<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Martín Aguirre</title>
    <description>The latest articles on Forem by Martín Aguirre (@martinxcvi).</description>
    <link>https://forem.com/martinxcvi</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%2F3485561%2Fa1b9467a-35e5-4203-a75a-be8f1f917453.jpg</url>
      <title>Forem: Martín Aguirre</title>
      <link>https://forem.com/martinxcvi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/martinxcvi"/>
    <language>en</language>
    <item>
      <title>Fundamentos de JavaScript - Variables: La Base de Cualquier Programa</title>
      <dc:creator>Martín Aguirre</dc:creator>
      <pubDate>Wed, 01 Oct 2025 21:37:21 +0000</pubDate>
      <link>https://forem.com/martinxcvi/fundamentos-de-javascript-variables-la-base-de-cualquier-programa-1log</link>
      <guid>https://forem.com/martinxcvi/fundamentos-de-javascript-variables-la-base-de-cualquier-programa-1log</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;Como concepto fundamental en todo lenguaje de programación, las &lt;strong&gt;variables&lt;/strong&gt; son la base de cualquier programa. Nos permiten almacenar y manipular datos que luego serán utilizados en nuestro programa. Como recurso útil, las variables son &lt;strong&gt;ubicaciones abstractas de almacenamiento&lt;/strong&gt;, identificadas por un nombre asociado que contiene un &lt;em&gt;valor&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Declarando Variables: const, let &amp;amp; var
&lt;/h2&gt;

&lt;p&gt;Para crear una variable en JavaScript, debemos &lt;em&gt;declararla&lt;/em&gt;, lo cual es el término apropiado para esta acción. JavaScript nos proporciona tres palabras clave para declarar variables: &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaration of a Variable with &lt;em&gt;var&lt;/em&gt;
&lt;/h3&gt;

&lt;h3&gt;
  
  
  Declaración de una Variable con &lt;em&gt;var&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;La palabra &lt;code&gt;var&lt;/code&gt; se usa para declarar variables con alcance de función o de alcance global, opcionalmente con un valor inicializado.&lt;/p&gt;

&lt;p&gt;Principales características de &lt;code&gt;var&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agregada durante la creación de JavaScript en 1995.&lt;/li&gt;
&lt;li&gt;Tiene alcance o ámbito de función (no de bloque).&lt;/li&gt;
&lt;li&gt;Puede redeclararse en el mismo ámbito sin errores.&lt;/li&gt;
&lt;li&gt;Se eleva al principio de su ámbito (hoisting) y se inicializa con &lt;code&gt;undefined&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ejemplo simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mercedes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Volkswagen&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// La redeclaración funciona&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;car&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: Volkswagen&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nevertheless, this sort of generous flexibility may lead to bugs or glitches in larger programs or systems. The use of this approach is not advised, unless you have a very good reason to do so.&lt;/p&gt;

&lt;p&gt;Sin embargo, esta suerte de flexibilidad generosa puede provocar errores o fallos en programas o sistemas más grandes. No se recomienda usar este enfoque, a menos que exista una buena razón para hacerlo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaración de una Variable con &lt;em&gt;let&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;La palabra &lt;code&gt;let&lt;/code&gt; se utiliza para declarar una variable reasignable y de alcance o ámbito local de bloque, opcionalmente inicializada con un valor.&lt;/p&gt;

&lt;p&gt;Principales características de &lt;code&gt;let&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agregada en ES6 (2015).&lt;/li&gt;
&lt;li&gt;Tiene ámbito de bloque (más seguro que var).&lt;/li&gt;
&lt;li&gt;No se puede redeclarar en el mismo ámbito.&lt;/li&gt;
&lt;li&gt;Se puede reasignar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un ejemplo simple de cómo declarar una variable sin valor, o al menos no todavía:&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;varName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En un sentido técnico, esta variable &lt;code&gt;varName&lt;/code&gt; es &lt;code&gt;undefined&lt;/code&gt; (indefinida), por lo que le asignaremos un valor:&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;varName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Casa&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;Como ya ha sido declarada, no volvemos a utilizar la palabra clave &lt;code&gt;let&lt;/code&gt;; solo queremos asignarle un valor, así que escribimos el nombre de la variable, agregamos el &lt;strong&gt;operador de asignación&lt;/strong&gt; (&lt;code&gt;=&lt;/code&gt;), y asignamos el &lt;em&gt;valor&lt;/em&gt; &lt;code&gt;"Casa"&lt;/code&gt; que es de tipo &lt;code&gt;string&lt;/code&gt; en este caso.&lt;/p&gt;

&lt;p&gt;Sin embargo, esto resulta poco práctico. Una forma más sencilla de realizar el trabajo sería la siguiente:&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;varName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Casa&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;Utilización de la palabra clave &lt;code&gt;let&lt;/code&gt;, nombre de la variable o "identificador", y el valor que se desea asignar.&lt;/p&gt;

&lt;p&gt;Siendo más claro y conciso:&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;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;azul&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// let color = "rojo"; Error: Ya ha sido declarada&lt;/span&gt;

&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rojo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// La reasignación funciona&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;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: "rojo"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplos adicionales de variables con la palabra clave &lt;code&gt;let&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;myDog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pipo&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;myDog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: "Pipo"&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;streetNum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;477&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;streetNum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: 477&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;isFalse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&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;isFalse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como habrás notado, existe una forma estándar de escribir los nombres que asignamos a nuestras variables. En JavaScript, este método se conoce como &lt;strong&gt;camelCase&lt;/strong&gt;. Esta convención tipográfica permite escribir frases sin espacios, donde la primera letra de cada palabra se escribe en mayúscula, excepto la primera letra del compuesto completo. Nos beneficiamos de ella facilitando así la lectura de elementos como variables y funciones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaration de una Variable con &lt;em&gt;const&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;La palabra &lt;code&gt;const&lt;/code&gt; se utiliza para declarar una variable local con alcance de bloque. El valor de una constante debe asignarse cuando se la inicializa y no puede modificarse mediante reasignación con el operador de asignación. Sin embargo, si dicha constante es un objeto, su propiedad puede añadirse, actualizarse o eliminarse.&lt;/p&gt;

&lt;p&gt;Se recomienda declarar una variable con &lt;code&gt;const&lt;/code&gt; cuando se sabe con certeza que su valor no cambiará.&lt;/p&gt;

&lt;p&gt;Características principales de &lt;code&gt;const&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;También agregada en ES6 (2015).&lt;/li&gt;
&lt;li&gt;Tiene alcance de bloque.&lt;/li&gt;
&lt;li&gt;No se puede redeclarar ni reasignar.&lt;/li&gt;
&lt;li&gt;Debe inicializarse en el momento de la declaración.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;span class="c1"&gt;// pi = 3.14; ✖️ Error: reasignación no permitida&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;pi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: 3.1416&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nota: &lt;code&gt;const&lt;/code&gt; hace que la &lt;em&gt;vinculación de la variable&lt;/em&gt; sea inmutable, NO el valor en sí mismo.&lt;br&gt;
Si el valor es un objeto o una matriz (array), su contenido puede cambiar:&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;myArr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;myArr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ Permitido - Se modifica el contenido&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;myArr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: [1, 2, 3, 4]&lt;/span&gt;

&lt;span class="nx"&gt;myArr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&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="c1"&gt;// ✖️ error: Reasignación a una constante&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si bien podemos modificar el contenido de la matriz (agregar, eliminar o cambiar elementos), no podemos reasignar la matriz completa a un nuevo valor.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ámbito de las Variables (Scope)
&lt;/h2&gt;

&lt;p&gt;Un &lt;strong&gt;ámbito&lt;/strong&gt; es la región de código donde una variable es accesible. Pensemos en esto como el contexto actual de ejecución donde los valores y las expresiones son visibles o se puede hacer referencia a ellos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ámbito Global (Global Scope)
&lt;/h3&gt;

&lt;p&gt;Las variables declaradas &lt;strong&gt;globalmente&lt;/strong&gt;, es decir, aquellas variables declaradas por fuera de cualquier &lt;em&gt;bloque&lt;/em&gt; o &lt;em&gt;función&lt;/em&gt;, tienen algo llamado &lt;strong&gt;ámbito global&lt;/strong&gt; (O, &lt;strong&gt;global scope&lt;/strong&gt;). Estas variables &lt;strong&gt;globales&lt;/strong&gt; pueden ser accedidas desde cualquier lugar en un programa en JavaScript.&lt;/p&gt;

&lt;p&gt;Las variables declaradas con &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; o &lt;code&gt;const&lt;/code&gt; comparten ciertas similitudes cuando se declaran por fuera de un bloque. Todas tienen un ámbito &lt;em&gt;global&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&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;Martin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Ámbito global&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;currentYear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&lt;/span&gt; &lt;span class="c1"&gt;// Ámbito global&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isDeveloper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;// Ámbito global&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Ejemplo Adicional
&lt;/h4&gt;

&lt;p&gt;Esta variable declarada fuera de la función, se convierte en &lt;strong&gt;global&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;treeName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ceibo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// La variable treeName puede ser usada aquí sin problemas&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printTreeName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// La variable treeName puede ser usada aquí también!&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// La variable treeName puede ser usada incluso después de la función&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Las Variables Globales Tienen Ámbito Global:
&lt;/h4&gt;

&lt;p&gt;Todos los scripts y funciones de la misma página web pueden acceder a una variable con alcance global.&lt;br&gt;
En los navegadores, las variables globales declaradas con &lt;code&gt;var&lt;/code&gt; se convierten automáticamente en propiedades del objeto &lt;code&gt;window&lt;/code&gt; (o &lt;code&gt;globalThis&lt;/code&gt; en JavaScript moderno).&lt;br&gt;
Las variables globales declaradas con &lt;code&gt;let&lt;/code&gt; o &lt;code&gt;const&lt;/code&gt; &lt;strong&gt;no&lt;/strong&gt; se adjuntan a &lt;code&gt;window&lt;/code&gt;, pero siguen siendo accesibles en cualquier parte del script.&lt;br&gt;
Demasiadas variables globales pueden provocar &lt;strong&gt;conflictos de nombres&lt;/strong&gt; (dos scripts que usan el mismo nombre de variable se sobrescriben accidentalmente).&lt;br&gt;
Depender de variables globales &lt;strong&gt;dificulta la depuración y el mantenimiento del código&lt;/strong&gt;, ya que cualquier parte del programa puede modificarlas inesperadamente.&lt;br&gt;
Práctica recomendada: limite las variables globales utilizando funciones, módulos o el alcance de bloque.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ámbito de Función (&lt;code&gt;var&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Las variables declaradas con &lt;code&gt;var&lt;/code&gt; son visibles en toda la función donde están definidas, incluso fuera de los bloques.&lt;/p&gt;

&lt;p&gt;Ejemplo rápido:&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;testVar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hola desde var!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ Funciona (Ámbito de función)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;testVar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: Hola desde var&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sin embargo, las variables definidas dentro de una función no son accesibles (visibles) desde fuera de ella. Esto incluye &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt;. Todas tienen &lt;strong&gt;ámbito de función&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myDogName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;dogName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fido&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Ámbito, o alcance, de función&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;dogName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myAgeNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;myAge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Ámbito, o alcance, de función&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;myAge&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isFunctionScoped&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;functionScoped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Ámbito, o alcance, de función&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;functionScoped&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;Con esto, podemos afirmar claramente que las variables declaradas dentro de una función de JavaScript son &lt;strong&gt;locales&lt;/strong&gt; a la función en términos de alcance.&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;// La variable carColor no puede usarse aquí&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getCarProps&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;carColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// La variable carColor puede usarse aquí sin problemas&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// La variable carColor no puede usarse aquí&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Las Variables Locales Tienen Ámbito de Función
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Se puede acceder a ellas &lt;strong&gt;únicamente&lt;/strong&gt; desde dentro de la función.&lt;/li&gt;
&lt;li&gt;Ningún script ni función &lt;strong&gt;externa a la función&lt;/strong&gt; puede acceder a ellas.&lt;/li&gt;
&lt;li&gt;Las variables con el &lt;strong&gt;mismo nombre&lt;/strong&gt; se pueden usar &lt;strong&gt;fuera de la función&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Las variables con el &lt;strong&gt;mismo nombre&lt;/strong&gt; se pueden usar en &lt;strong&gt;diferentes funciones&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Las variables locales &lt;strong&gt;se crean&lt;/strong&gt; al &lt;strong&gt;iniciar&lt;/strong&gt; una función.&lt;/li&gt;
&lt;li&gt;Las variables locales &lt;strong&gt;se eliminan&lt;/strong&gt; al &lt;strong&gt;finalizar&lt;/strong&gt; la función.&lt;/li&gt;
&lt;li&gt;Los argumentos (parámetros) funcionan como variables locales &lt;strong&gt;dentro de las funciones&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ámbito de Bloque, o Block Scope (&lt;code&gt;let&lt;/code&gt; &amp;amp; &lt;code&gt;const&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Las variables declaradas con &lt;code&gt;let&lt;/code&gt; o &lt;code&gt;const&lt;/code&gt; solo son accesibles dentro del bloque (&lt;code&gt;{ ... }&lt;/code&gt;) donde están definidas. Este enfoque proporciona una organización y estructuración del código mucho mejor, evitando así sobrescrituras no deseadas de variables y errores inesperados.&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;testLetAndConst&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;msg1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hola desde let&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;msg2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hola desde const&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;msg1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ Funciona&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;msg2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ Funciona&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// console.log(msg1); ✖️ Error: msg1 no está definido&lt;/span&gt;
  &lt;span class="c1"&gt;// console.log(msg2); ✖️ Error: msg2 no está definido&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;testLetAndConst&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Notas
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Las variables declaradas con la palabra clave &lt;code&gt;var&lt;/code&gt; no pueden tener alcance de bloque.&lt;/li&gt;
&lt;li&gt;Las variables declaradas con la palabra clave &lt;code&gt;var&lt;/code&gt;, dentro de un bloque &lt;code&gt;{ ... }&lt;/code&gt;, son accesibles desde fuera del bloque.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Sintetizada
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;var&lt;/code&gt; tiene la particularidad de ignorar los límites de bloque. Sin embargo, está limitado por funciones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt; respetan los límites de bloque. Por lo tanto, son un enfoque más seguro y predecible.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una tabla fácil de seguir para comprender mejor estos conceptos relacionados con el ámbito o alcance:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Palabra&lt;/th&gt;
&lt;th&gt;Ámbito&lt;/th&gt;
&lt;th&gt;Redeclaración&lt;/th&gt;
&lt;th&gt;Elevación (Hoisting)&lt;/th&gt;
&lt;th&gt;Notas&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Función&lt;/td&gt;
&lt;td&gt;✔️ Sí&lt;/td&gt;
&lt;td&gt;✔️ Con &lt;code&gt;undefined&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Código 'legacy', evitar en lo posible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;let&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bloque&lt;/td&gt;
&lt;td&gt;✖️ No&lt;/td&gt;
&lt;td&gt;✔️ Sin inicialización (TDZ)&lt;/td&gt;
&lt;td&gt;Utilizar para valores mutables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;const&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bloque&lt;/td&gt;
&lt;td&gt;✖️ No&lt;/td&gt;
&lt;td&gt;✔️ Sin inicialización (TDZ)&lt;/td&gt;
&lt;td&gt;Utilizar por defecto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Hoisting, o 'Elevación'
&lt;/h2&gt;

&lt;p&gt;La &lt;strong&gt;Elevación&lt;/strong&gt;, o &lt;strong&gt;Hoisting&lt;/strong&gt; es un comportamiento predeterminado de JavaScript que consiste en el proceso mediante el cual el intérprete mueve la declaración de funciones, variables, clases o importaciones a la parte superior de su ámbito, antes de la ejecución del código.&lt;/p&gt;

&lt;h3&gt;
  
  
  Las Declaraciones de Variables se Elevan
&lt;/h3&gt;

&lt;p&gt;En JavaScript, podemos declarar una variable después de usarla; es decir, una variable puede usarse antes de ser declarada.&lt;/p&gt;

&lt;p&gt;Los dos ejemplos siguientes darán el mismo resultado.&lt;/p&gt;

&lt;p&gt;Ejemplo 1:&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;animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;perro&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Asignando "perro" a animal&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;animal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: "perro"&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Declaración&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplo 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Declaración&lt;/span&gt;

&lt;span class="nx"&gt;animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Asignando "perro" a animal&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;animal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: "perro"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Las variables declaradas con &lt;code&gt;var&lt;/code&gt; se elevarán, lo que significa que se puede hacer referencia a ellas desde cualquier lugar dentro de su ámbito respectivo. Sin embargo, si se intenta acceder a una variable antes de que se haya declarado, su valor predeterminado siempre será &lt;code&gt;undefined&lt;/code&gt;. Teniendo esto en cuenta, podemos afirmar que solo su &lt;em&gt;declaración&lt;/em&gt; e &lt;em&gt;inicialización predeterminada&lt;/em&gt; se elevarán, pero no su &lt;em&gt;valor mediante asignación&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="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;tree&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined, o indefinido&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;tree&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pino&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;printColor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined, o indefinido&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Carmesí&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;printColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como ejemplo adicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;tree&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;tree&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined, o indefinido&lt;/span&gt;

&lt;span class="nx"&gt;tree&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pino&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;printColor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;color&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;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined, o indefinido&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Carmesí&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;printColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  El Comportamiento de Elevación, o Hoisting, en &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;A diferencia de &lt;code&gt;var&lt;/code&gt;, las palabras clave &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt; tienen su propio mecanismo de elevación: &lt;strong&gt;Se elevan&lt;/strong&gt; al principio del bloque (lo que significa que JavaScript sabe que existen), pero permanecen &lt;strong&gt;sin inicializar&lt;/strong&gt; hasta que la ejecución del código llega a su línea de declaración. Esto difiere de &lt;code&gt;var&lt;/code&gt;, que se eleva &lt;em&gt;y&lt;/em&gt; se inicializa automáticamente con &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Intentar utilizar una variable &lt;code&gt;let&lt;/code&gt; antes de su declaración adecuada dará como resultado un &lt;strong&gt;&lt;code&gt;ReferenceError&lt;/code&gt;&lt;/strong&gt; (error de referenciación).&lt;/p&gt;

&lt;p&gt;Hasta que se procese la declaración, la variable permanecerá en una "&lt;em&gt;&lt;code&gt;zona muerta temporal&lt;/code&gt;&lt;/em&gt;". Esta &lt;strong&gt;Zona Muerta Temporal&lt;/strong&gt; es el período entre la entrada en el ámbito donde se declara la variable y la declaración real. Durante este tiempo, la variable técnicamente existe en memoria, pero no se puede acceder a ella, lo que genera un error de referencia (ReferenceError) si se intenta usar.&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;dog&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;dog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mastín&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;cat&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Persa&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;Veamos otro ejemplo:&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;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;displayYear&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;displayYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;El año es &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;year&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;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salida:&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;Uncaught&lt;/span&gt; &lt;span class="nx"&gt;ReferenceError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A diferencia de las declaraciones con &lt;code&gt;var&lt;/code&gt;, que se &lt;em&gt;inicializan&lt;/em&gt; durante su creación con &lt;code&gt;undefined&lt;/code&gt; como valor predeterminado, &lt;code&gt;year&lt;/code&gt; no tiene referencia a su valor en memoria. Debido a este pequeño detalle, se genera un error de &lt;em&gt;referencia&lt;/em&gt;, como se ve en el ejemplo.&lt;/p&gt;

&lt;p&gt;Ahora, volviendo al concepto de "zona muerta temporal", lo examinaremos con más detalle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zona muerta temporal en cuestión:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;displayYear&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;displayYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;El año es &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Fin de la zona muerta temporal:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Forma correcta de utilizar la metodología &lt;code&gt;let&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&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;year&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;displayYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;El año es &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;displayYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Además, también podemos ver que la zona muerta temporal puede proporcionarnos un claro beneficio a la hora de evitar sobrescrituras accidentales:&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;fruit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Manzana&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Aquí comienza la zona muerta temporal para la variable fruta en ámbito de bloque&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;fruit&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Banana&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por otro lado, tenemos la palabra clave &lt;code&gt;const&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;horseName&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;horseName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Salida:&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;Uncaught&lt;/span&gt; &lt;span class="nx"&gt;SyntaxError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Missing&lt;/span&gt; &lt;span class="nx"&gt;initializer&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;declaration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dado que una constante no puede cambiar su valor mediante asignación ni redeclararse mientras el programa se está ejecutando, debe &lt;em&gt;inicializarse&lt;/em&gt; con un valor.&lt;/p&gt;

&lt;p&gt;Uso correcto de &lt;code&gt;const&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;horseName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Duque&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;horseName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Duque
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Sombreado de Variables (Shadowing)
&lt;/h2&gt;

&lt;p&gt;Lo llamamos así cuando una variable de ámbito interno oculta o anula una variable externa dentro del ámbito local.&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alicia&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;printName&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Roberto&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;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: Roberto&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;printName&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;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Imprime: Alicia&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dos puntos clave a tener en cuenta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; permite la redeclaración, lo que puede generar errores y resultados inesperados.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt; generarán errores si se intenta redeclarar.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;25.4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;32.7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Ningún error, simplemente se sobrescribe&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;18.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;49.7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// SyntaxError: El identificador 'y' ya ha sido declarado&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teniendo en cuenta que el &lt;em&gt;sombreado de variables&lt;/em&gt; puede hacernos perder el acceso a la variable original, esta práctica puede generar errores no deseados y resultados inesperados que dificultarán la depuración, ya que no comprenderemos el origen del problema. Siempre es recomendable declarar las variables con un nombre lo más explicativo posible, de modo que describa su propósito por sí mismo y para sí mismo. También se recomienda declarar las variables organizadamente en grupos donde estén cerca unas de otras para que sea más fácil detectar nombres repetidos, en lugar de dispersarlas sin sentido por el código.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: Buenas Prácticas En Cuanto a Variables
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Preferir usar &lt;code&gt;const&lt;/code&gt; por defecto y luego &lt;code&gt;let&lt;/code&gt; cuando se requiera reasignación. Evitar &lt;code&gt;var&lt;/code&gt; tanto como sea posible, ya que puede provocar problemas de &lt;em&gt;hoisting&lt;/em&gt;, o &lt;em&gt;elevación&lt;/em&gt; y comportamientos inesperados. El desarrollo moderno con JavaScript se basa principalmente en &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Mantener el alcance de las variables lo más limitado posible (&lt;em&gt;ámbito de bloque &amp;gt; ámbito de función &amp;gt; global&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Evitar el &lt;em&gt;shadowing&lt;/em&gt;, o &lt;em&gt;sombreado&lt;/em&gt;, a menos que sea intencional, obvio y, en última instancia, útil.&lt;/li&gt;
&lt;li&gt;Minimizar el uso de variables &lt;em&gt;globales&lt;/em&gt;. Estas son accesibles desde cualquier lugar, lo que puede causar conflictos de nombres, errores difíciles de encontrar y diferentes tipos de sorpresas desagradables. Desarrollar un gusto por las declaraciones con alcance &lt;em&gt;local&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Inicializar las variables al declararlas para mayor claridad. Esto evita que tengan un valor &lt;code&gt;undefined&lt;/code&gt;, o indefinido, lo que podría provocar posibles errores.&lt;/li&gt;
&lt;li&gt;Use nombres descriptivos que resalten el propósito de la variable o los datos que contiene; ya sea global &lt;strong&gt;o&lt;/strong&gt; local, la legibilidad es más importante de lo que cree.&lt;/li&gt;
&lt;li&gt;Tender a agrupar variables relacionadas. Al conectarlas de forma lógica y sensata, se mejora la legibilidad y se reduce el riesgo de &lt;em&gt;sombreado&lt;/em&gt;, o &lt;em&gt;shadowing&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Gracias por tu tiempo.&lt;/p&gt;

&lt;p&gt;Si te interesa apoyar mis escritos, podés comprarme un café aquí: &lt;a href="https://paypal.me/martinxcvi" rel="noopener noreferrer"&gt;PayPal.me/martinxcvi&lt;/a&gt; ☕  &lt;/p&gt;




&lt;p&gt;Foto de portada por &lt;a href="https://unsplash.com/@ddmarshall?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Desmond Marshall&lt;/a&gt; en &lt;a href="https://unsplash.com/photos/white-and-black-concrete-building-MOtzaUPRxR8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt; 📸&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>español</category>
    </item>
    <item>
      <title>JavaScript Fundamentals - Variables: The Foundation of Any Program</title>
      <dc:creator>Martín Aguirre</dc:creator>
      <pubDate>Tue, 30 Sep 2025 19:39:20 +0000</pubDate>
      <link>https://forem.com/martinxcvi/javascript-fundamentals-variables-the-foundation-of-any-program-4ibp</link>
      <guid>https://forem.com/martinxcvi/javascript-fundamentals-variables-the-foundation-of-any-program-4ibp</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As a fundamental concept in every programming language, &lt;strong&gt;variables&lt;/strong&gt; are the foundation of &lt;em&gt;any&lt;/em&gt; program. They let us &lt;strong&gt;store and manipulate data&lt;/strong&gt; that we will use later in our program. As a useful resource, variables are &lt;strong&gt;abstract storage locations&lt;/strong&gt;, identified by an associated name, which contains a &lt;em&gt;value&lt;/em&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Declaring Variables: const, let and var
&lt;/h2&gt;

&lt;p&gt;In order to create a variable in JavaScript, we must &lt;em&gt;declare&lt;/em&gt; it, which is the proper term for this action. JavaScript gives us three keywords to declare variables: &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, and &lt;code&gt;const&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaration of a Variable with &lt;em&gt;var&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;var&lt;/code&gt; statement is used to declare a function-scoped, or globally-scoped variables, optionally with an initialized value.&lt;/p&gt;

&lt;p&gt;Main characteristics of &lt;code&gt;var&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduced when JavaScript was first created in 1995.&lt;/li&gt;
&lt;li&gt;Has function scope (not block scope).&lt;/li&gt;
&lt;li&gt;Can be redeclared in the same scope without error.&lt;/li&gt;
&lt;li&gt;Hoisted to the top of its scope and initialized with &lt;code&gt;undefined&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple 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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mercedes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;car&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Volkswagen&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// redeclaration works&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;car&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// "Volkswagen" gets printed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nevertheless, this sort of generous flexibility may lead to bugs or glitches in larger programs or systems. The use of this approach is not advised, unless you have a very good reason to do so.&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaration of a Variable with &lt;em&gt;let&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;let&lt;/code&gt;statement is used to declare a re-assignable, block-scoped local variable, optionally with an initialized value.&lt;/p&gt;

&lt;p&gt;Main characteristics of &lt;code&gt;let&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduced in ES6 (2015).&lt;/li&gt;
&lt;li&gt;Has block scope (safer than var).&lt;/li&gt;
&lt;li&gt;Cannot be redeclared in the same scope.&lt;/li&gt;
&lt;li&gt;Can be reassigned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple example of how to declare a variable with no value, or at least not yet:&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;varName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a technical sense, this &lt;code&gt;varName&lt;/code&gt; variable is &lt;code&gt;undefined&lt;/code&gt;, so we'll assign it a value:&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;varName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;House&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;Since it has already been declared, we do not use the &lt;code&gt;let&lt;/code&gt; keyword again; we just want to assign a value to it, so we write the variable's name, add the &lt;strong&gt;assignment operator&lt;/strong&gt; (&lt;code&gt;=&lt;/code&gt;), and assign the &lt;code&gt;"House"&lt;/code&gt; &lt;em&gt;value&lt;/em&gt; which is of type &lt;code&gt;string&lt;/code&gt; in this case.&lt;/p&gt;

&lt;p&gt;Nonetheless, this is somewhat unpractical. A more straightforward way of completing the job would be as follows:&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;varName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;House&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;Use of the &lt;code&gt;let&lt;/code&gt; keyword, variable name or "identifier", and the value that needs to be assigned.&lt;/p&gt;

&lt;p&gt;Being more clear and concise:&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;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;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;// let color = "red"; Error: It's already declared&lt;/span&gt;

&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// reassignment works&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;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "red" gets printed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Additional examples of variables with the &lt;code&gt;let&lt;/code&gt; keyword:&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;myDog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pipo&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;myDog&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// "Pipo" gets printed&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;streetNum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;477&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;streetNum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 477 gets printed&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;isFalse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&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;isFalse&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// false gets printed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you may notice, there's a standard way of writing the names we assign to our variables. In JavaScript, this method is known as &lt;strong&gt;camelCase&lt;/strong&gt;. This typographical convention is a way of writing phrases without spaces, where the first letter of each word is capitalized, except for the first letter of the entire compound. We benefit from it by making things like variables and functions easier to read&lt;/p&gt;

&lt;h3&gt;
  
  
  Declaration of a Variable with &lt;em&gt;const&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;const&lt;/code&gt; statement is used to declare a block-scoped local variable. The value of a constant must be assigned when initialized and it cannot be changed through reassignment using the assignment operator. However, if such constant is an object, its property can either be added, updated or removed.&lt;/p&gt;

&lt;p&gt;It is advised to declare a variable with &lt;code&gt;const&lt;/code&gt; when you certainly know that the value will not change.&lt;/p&gt;

&lt;p&gt;Main characteristics of &lt;code&gt;const&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Also introduced in ES6 (2015).&lt;/li&gt;
&lt;li&gt;Has block scope.&lt;/li&gt;
&lt;li&gt;Cannot be redeclared or reassigned.&lt;/li&gt;
&lt;li&gt;Must be initialized at the moment of declaration.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;span class="c1"&gt;// pi = 3.14; ✖️ Error: reassignment not allowed&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;pi&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 3.1416 gets printed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: &lt;code&gt;const&lt;/code&gt; makes the &lt;em&gt;variable binding&lt;/em&gt; immutable, NOT the value itself.&lt;br&gt;
If the value is an object or array, its contents can still change:&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;myArr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;myArr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ allowed - modifying contents&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;myArr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// [1, 2, 3, 4] gets printed&lt;/span&gt;

&lt;span class="nx"&gt;myArr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&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="c1"&gt;// ✖️ error: Assignment to constant variable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While we can modify the array's contents (adding, removing, or changing elements), we cannot reassign the entire array to a new value.&lt;/p&gt;




&lt;h2&gt;
  
  
  Variables Scope
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;scope&lt;/strong&gt; is the region of code where a variable is accessible. Let's think of it as the current context of execution in which values and expressions are "&lt;em&gt;visible&lt;/em&gt;" or can be referenced.&lt;/p&gt;

&lt;h3&gt;
  
  
  Global Scope
&lt;/h3&gt;

&lt;p&gt;Variables declared &lt;strong&gt;Globally&lt;/strong&gt;, that is to say, variables declared outside any &lt;em&gt;block&lt;/em&gt; or &lt;em&gt;function&lt;/em&gt;, have something called &lt;strong&gt;Global Scope&lt;/strong&gt;. This &lt;strong&gt;Global&lt;/strong&gt; variables can be accessed from anywhere in a JavaScript program.&lt;/p&gt;

&lt;p&gt;Variables declared with either &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; share certain similarities when declared outside a block. They all have &lt;em&gt;Global&lt;/em&gt; scope:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;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;Martin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Global scope&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;currentYear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&lt;/span&gt; &lt;span class="c1"&gt;// Global scope&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isDeveloper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;// Global scope&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Additional Example
&lt;/h4&gt;

&lt;p&gt;This variable declared outside the function, becomes &lt;strong&gt;Global&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;treeName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ceibo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;// treeName variable can seamlessly be used here&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printTreeName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// treeName variable can be used here too!&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// treeName variable can evenly be used after the function&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Global Variables have Global Scope:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;All scripts and functions in the same web page can access a variable with global scope.&lt;/li&gt;
&lt;li&gt;In browsers, global variables declared with &lt;code&gt;var&lt;/code&gt; automatically become properties of the &lt;code&gt;window&lt;/code&gt; &lt;em&gt;object&lt;/em&gt; (or &lt;code&gt;globalThis&lt;/code&gt; in modern JavaScript).&lt;/li&gt;
&lt;li&gt;Globals declared with &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; do &lt;strong&gt;not&lt;/strong&gt; attach to &lt;code&gt;window&lt;/code&gt;, but they’re still accessible everywhere in the script.&lt;/li&gt;
&lt;li&gt;Too many global variables can lead to &lt;strong&gt;naming conflicts&lt;/strong&gt; (two scripts using the same variable name accidentally overwrite each other).&lt;/li&gt;
&lt;li&gt;Relying on globals makes code &lt;strong&gt;harder to debug and maintain&lt;/strong&gt;, since any part of the program can modify them unexpectedly.&lt;/li&gt;
&lt;li&gt;Best practice: limit global variables by using functions, modules, or block scope instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Function Scope (&lt;code&gt;var&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Variables declared with &lt;code&gt;var&lt;/code&gt; are visible throughout the entire function where they are defined — even outside blocks.&lt;/p&gt;

&lt;p&gt;Quick 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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;testVar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello from var!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ Works (function scoped)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;testVar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// "Hello from var" gets printed&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, variables defined inside a function are not accessible (visible) from outside the function. That includes &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;. They all have &lt;strong&gt;function scope&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myDogName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;dogName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Fido&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Function scope&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;dogName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myAgeNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;myAge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Function scope&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;myAge&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isFunctionScoped&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;functionScoped&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Function scope&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;functionScoped&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;With this, we can clearly state that variables declared within a JavaScript function, are &lt;strong&gt;local&lt;/strong&gt; to the function in terms of scope.&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;// Variable carColor cannot be used here&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getCarProps&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;carColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Variable carColor can seamlessly be used here&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Variable carColor cannot be used here&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Local Variables Have Function Scope
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;They can &lt;strong&gt;only&lt;/strong&gt; be accessed from within the function.&lt;/li&gt;
&lt;li&gt;No scripts or functions &lt;strong&gt;outside the function&lt;/strong&gt; can access them.&lt;/li&gt;
&lt;li&gt;Variables with the &lt;strong&gt;same name&lt;/strong&gt; can be used &lt;strong&gt;outside the function&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Variables with the &lt;strong&gt;same name&lt;/strong&gt; can be used in &lt;strong&gt;different functions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Local variables are &lt;strong&gt;created&lt;/strong&gt; when a function &lt;strong&gt;starts&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Local variables are &lt;strong&gt;deleted&lt;/strong&gt; when the function is &lt;strong&gt;completed&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Arguments (parameters) work as local variables &lt;strong&gt;inside functions&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Block Scope (&lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Variables declared with &lt;code&gt;let&lt;/code&gt; or &lt;code&gt;const&lt;/code&gt; are only accessible inside the block (&lt;code&gt;{ ... }&lt;/code&gt;) where they are defined. This approach provides a much better code organization and structuring, thus preventing unintended variables overwrites and unexpectedly undesired errors .&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;testLetAndConst&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;msg1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello from let&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;msg2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello from const&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;msg1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ Works&lt;/span&gt;
    &lt;span class="nx"&gt;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;msg2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✔️ Works&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// console.log(msg1); ✖️ Error: msg1 is not defined&lt;/span&gt;
  &lt;span class="c1"&gt;// console.log(msg2); ✖️ Error: msg2 is not defined&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;testLetAndConst&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Notes
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Variables declared with the &lt;code&gt;var&lt;/code&gt; keyword cannot have block scope.&lt;/li&gt;
&lt;li&gt;Variables declared with the &lt;code&gt;var&lt;/code&gt; keyword, inside a &lt;code&gt;{ ... }&lt;/code&gt; block can be accessed from outside the block.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Synthesized
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;var&lt;/code&gt; has the particularity that it ignores block boundaries. Nonetheless, it is indeed limited by functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; respect block boundaries. Thus, they are a safer, and more predictable approach.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An easy-to-follow table to grasp these scope-related concepts better:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Scope Type&lt;/th&gt;
&lt;th&gt;Redeclaration&lt;/th&gt;
&lt;th&gt;Hoisted&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Function&lt;/td&gt;
&lt;td&gt;✔️ Yes&lt;/td&gt;
&lt;td&gt;✔️ With &lt;code&gt;undefined&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Legacy, avoid if possible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;let&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;✖️ No&lt;/td&gt;
&lt;td&gt;✔️ But uninitialized (TDZ)&lt;/td&gt;
&lt;td&gt;Use for mutable values&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;const&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;✖️ No&lt;/td&gt;
&lt;td&gt;✔️ But uninitialized (TDZ)&lt;/td&gt;
&lt;td&gt;Use by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Hoisting
&lt;/h2&gt;

&lt;p&gt;Hoisting is a default behaviour of JavaScript consisting of the process whereby the interpreter moves the declaration of functions, variables, classes, or imports to the top of their scope, prior to execution of the code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Variables Declarations Are Hoisted
&lt;/h3&gt;

&lt;p&gt;In JavaScript we can declare a variable after it has been used; id est, a variable can be used before it has been declared.&lt;/p&gt;

&lt;p&gt;Both of the following examples below will provide the same result.&lt;/p&gt;

&lt;p&gt;Example 1:&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;animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Assigning "dog" to animal&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;animal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Printing "dog" in the console&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Declaration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;animal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Declaration&lt;/span&gt;

&lt;span class="nx"&gt;animal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dog&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Assigning "dog" to animal&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;animal&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Printing "dog" in the console&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Variables declared with &lt;code&gt;var&lt;/code&gt; will be hoisted, this means they can be referenced from anywhere in their respective scope. Nonetheless, if you try to access a variable before it has been declared, its value will eventually always default to &lt;code&gt;undefined&lt;/code&gt;. With this in mind, we can state that only its &lt;em&gt;declaration&lt;/em&gt; and &lt;em&gt;default initialization&lt;/em&gt; will get &lt;strong&gt;hoisted&lt;/strong&gt;, but not its &lt;em&gt;value through assignment&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="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;tree&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;tree&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pine&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;printColor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Crimson&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;printColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As an additional 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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;tree&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;tree&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;

&lt;span class="nx"&gt;tree&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pine&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;printColor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;color&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;color&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// undefined&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Crimson&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;printColor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  The &lt;code&gt;let&lt;/code&gt; &amp;amp; &lt;code&gt;const&lt;/code&gt; Hoisting Behaviour
&lt;/h4&gt;

&lt;p&gt;Differently from &lt;code&gt;var&lt;/code&gt;, the &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; keywords have their unique hoisting mechanism: They &lt;strong&gt;are&lt;/strong&gt; hoisted to the top of the block (meaning JavaScript knows they exist), but they remain &lt;strong&gt;uninitialized&lt;/strong&gt; until the code execution reaches their declaration line. This is different from &lt;code&gt;var&lt;/code&gt;, which is hoisted &lt;em&gt;and&lt;/em&gt; automatically initialized with &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Attempting to use a &lt;code&gt;let&lt;/code&gt; variable before its proper declaration will result in a &lt;strong&gt;&lt;code&gt;ReferenceError&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Until the declaration is processed, the variable will remain in a "&lt;em&gt;&lt;code&gt;temporal dead zone&lt;/code&gt;&lt;/em&gt;". The &lt;strong&gt;Temporal Dead Zone&lt;/strong&gt; is the period between entering the scope where the variable is declared and the actual declaration statement. During this time, the variable technically exists in memory but cannot be accessed, resulting in a ReferenceError if you try to use it.&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;dog&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;dog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mastiff&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;cat&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Persian&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;Let's see an additional 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="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;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;displayYear&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;displayYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The year is &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;year&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;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&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;Uncaught&lt;/span&gt; &lt;span class="nx"&gt;ReferenceError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;defined&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unlike &lt;code&gt;var&lt;/code&gt; declarations which are &lt;em&gt;initialized&lt;/em&gt; during its creation phase with &lt;code&gt;undefined&lt;/code&gt; as the default value, &lt;code&gt;year&lt;/code&gt; has no reference to its value in the memory. Due to this fine detail, a &lt;em&gt;reference&lt;/em&gt; error is thrown as seen in the example.&lt;/p&gt;

&lt;p&gt;Now, going back to the "temporal dead zone" concept, we will examine it a little bit better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temporal dead zone in question:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nf"&gt;displayYear&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;displayYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The year is &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;End of the temporal dead zone:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Proper way for the &lt;code&gt;let&lt;/code&gt; methodology:&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;year&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2025&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;year&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;displayYear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The year is &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;year&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;displayYear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In addition, we can also see that the temporal dead zone can provide us a clear benefits when it comes to avoiding accidental overwritings:&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;fruit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Apple&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Temporal dead zone for block-scoped fruit starts here&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fruit&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ReferenceError&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;fruit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Banana&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the other hand, we have the &lt;code&gt;const&lt;/code&gt; keyword:&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;horseName&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;horseName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&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;Uncaught&lt;/span&gt; &lt;span class="nx"&gt;SyntaxError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Missing&lt;/span&gt; &lt;span class="nx"&gt;initializer&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;declaration&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since a constant cannot change its value through assignment or be re-declared while the program is running, it must be &lt;em&gt;initialized&lt;/em&gt; with a value&lt;/p&gt;

&lt;p&gt;Proper use of &lt;code&gt;const&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;horseName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Duke&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;horseName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Duke
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Variable Shadowing
&lt;/h2&gt;

&lt;p&gt;We call it as such when an inner-scope variable hides or overrides an outer variable within the local scope&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;printName&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;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Bob&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;printName&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;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Alice&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two key points to keep carefully in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;var&lt;/code&gt; allows redeclaration, something which can lead to bugs and unexpected outcomes.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt; will throw errors if you attempt to redeclare.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;25.4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;32.7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// No errors, it simply gets overwritten&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;18.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;49.7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// SyntaxError: Identifier 'y' has already been declared&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Considering that &lt;em&gt;variable shadowing&lt;/em&gt; can make us lose access to the original variable, such practice can lead to unwanted bugs and unexpected results that will make it difficult to debug since the origin of the issue won't be clear to us. It is always a good idea to declare variables with a name as properly explanatory as possible, so it describes its purpose by itself and for itself. It is also recommended to declare your variables organizedly in groups where they are all near one another in order to make it easy to spot if there are repeated names, instead of senselessly spreading them across the codebase.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: Variables General Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Have the preference of using &lt;code&gt;const&lt;/code&gt; by default, then &lt;code&gt;let&lt;/code&gt; when reassignment is required. Avoid &lt;code&gt;var&lt;/code&gt; as much as possible, since it can lead to &lt;em&gt;hoisting&lt;/em&gt; issues and unexpected behaviours. Modern JavaScript development relies primarily on &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keep variables scoped as tightly as possible (&lt;em&gt;block scope &amp;gt; function scope &amp;gt; global&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Avoid &lt;em&gt;shadowing&lt;/em&gt; unless it’s intentional, obvious and, ultimately, useful.&lt;/li&gt;
&lt;li&gt;Minimize the use of &lt;em&gt;global&lt;/em&gt; variables. These are accessible everywhere, which can cause name collisions, hard-to-find bugs, and different sort of ungrateful surprises. Developed a liking for &lt;em&gt;locally&lt;/em&gt; scoped declarations.&lt;/li&gt;
&lt;li&gt;Initialize variables when declared for clarity. This prevents them to have an &lt;code&gt;undefined&lt;/code&gt; value which could lead to potential errors.&lt;/li&gt;
&lt;li&gt;Use descriptive names that highlight the variable's purpose or data that it holds — be it global &lt;strong&gt;or&lt;/strong&gt; local, readability matters more than you think.&lt;/li&gt;
&lt;li&gt;Tend to group related variables together. When they are connected logically and sensically, this improves readability and reduces &lt;em&gt;shadowing&lt;/em&gt; risk. &lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Thank you for your time!&lt;/p&gt;

&lt;p&gt;If you’d like to support my writing, you can buy me a coffee here: &lt;a href="https://paypal.me/martinxcvi" rel="noopener noreferrer"&gt;PayPal.me/martinxcvi&lt;/a&gt; ☕  &lt;/p&gt;




&lt;p&gt;Cover photo by &lt;a href="https://unsplash.com/@ddmarshall?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Desmond Marshall&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/white-and-black-concrete-building-MOtzaUPRxR8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt; 📸&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>variables</category>
      <category>programming</category>
    </item>
    <item>
      <title>Introducción a JavaScript: Conceptos básicos del Navegador y Node.js</title>
      <dc:creator>Martín Aguirre</dc:creator>
      <pubDate>Fri, 12 Sep 2025 20:20:02 +0000</pubDate>
      <link>https://forem.com/martinxcvi/introduccion-a-javascript-conceptos-basicos-del-navegador-y-nodejs-215f</link>
      <guid>https://forem.com/martinxcvi/introduccion-a-javascript-conceptos-basicos-del-navegador-y-nodejs-215f</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;JavaScript es un lenguaje de programación orientado a objetos, de tipado dinámico, principalmente eficaz para el desarrollo de proyectos web interactivos. Puede manipular poderosamente la estructura de las páginas web y ofrece una amplia gama de funciones y flexibilidades. Por otro lado, con la ayuda de Node.js, también puede funcionar elegantemente en el servidor como una alternativa de desarrollo backend a otros lenguajes, destacando por su velocidad, asincronismo y modularidad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Navegador vs Node.js
&lt;/h2&gt;

&lt;p&gt;JavaScript se creó originalmente para ejecutarse en el &lt;strong&gt;navegador&lt;/strong&gt;, donde da vida a los sitios web mediante interactividad, animaciones y comportamiento dinámico. Todos los navegadores modernos actuales cuentan con un motor JavaScript integrado que lo hace posible.&lt;/p&gt;

&lt;p&gt;Pero JavaScript no se limita solo al navegador. Gracias a &lt;strong&gt;Node.js&lt;/strong&gt;, también puede ejecutarse directamente en tu computadora, fuera de una página web. Esto abrió la puerta a su uso en el &lt;strong&gt;backend&lt;/strong&gt;, potenciando servidores, gestionando archivos y creando aplicaciones que van mucho más allá del navegador.&lt;/p&gt;

&lt;p&gt;En este artículo, exploraremos ambos enfoques. Comenzaremos con el navegador, el entorno tradicional de JavaScript, y luego pasaremos a Node.js para ver cómo se puede usar el mismo lenguaje en un entorno completamente diferente.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript en el Navegador
&lt;/h2&gt;

&lt;p&gt;La manera tradicional:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crear una carpeta o directorio&lt;/li&gt;
&lt;li&gt;Abrirlo usando un editor de texto (Visual Studio Code, como recomendación principal)&lt;/li&gt;
&lt;li&gt;Crear un archivo HTML denominado &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Crear un archivo JavaScript denominado &lt;code&gt;script.js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Agregar tu código dentro de &lt;code&gt;script.js&lt;/code&gt; y conectarlo al archivo HTML&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Código HTML mínimo&lt;/strong&gt; para copiar y pegar en tu archivo &lt;code&gt;index.html&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"es"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Mi Primera Práctica en JavaScript&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- JavaScript se cargará al final --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tenemos una estructura HTML básica, con una etiqueta &lt;em&gt;script&lt;/em&gt; donde se inyecta el código JavaScript con la ayuda del atributo &lt;code&gt;src&lt;/code&gt; donde referenciamos la ubicación de nuestro archivo &lt;code&gt;script.js&lt;/code&gt;, que en este caso está en la misma carpeta que &lt;code&gt;index.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Código JavaScript mínimo&lt;/strong&gt; para copiar y pegar en tu archivo &lt;code&gt;script.js&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hola Mundo Desde Script.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora, abrí el archivo &lt;code&gt;index.html&lt;/code&gt; en tu navegador.&lt;/p&gt;

&lt;p&gt;Para ver el resultado, abrí la consola en &lt;strong&gt;herramientas para desarrolladores&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En Windows/Linux: presionar F12 o Ctrl + Shift + I&lt;/li&gt;
&lt;li&gt;En macOS: presionar Cmd + Option + I&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En este punto, deberías ver "Hola Mundo Desde Script.js" impreso en la consola de tu navegador.&lt;/p&gt;

&lt;p&gt;Por ejemplo:&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%2F2qf1hepypnkk5ryneqsl.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%2F2qf1hepypnkk5ryneqsl.png" alt="Console screenshot" width="618" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Un Poco Más de Interacción
&lt;/h3&gt;

&lt;p&gt;Imprimir en la consola es un recurso muy útil en JavaScript, pero ahora modifiquemos algo en la página. Actualizá el '&lt;strong&gt;cuerpo&lt;/strong&gt;' (&lt;strong&gt;body&lt;/strong&gt;) de tu &lt;strong&gt;HTML&lt;/strong&gt; así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;¡Bienvenido!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"changeText()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Clickeame&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y dentro de &lt;code&gt;script.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;changeText&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;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;¡Hiciste click en el botón!&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;Ahora, cuando abras la página y hagas click en el botón, el texto en el &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; se actualizará.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;¡Felicitaciones!&lt;/em&gt; — Acabás de aprender un poco sobre la &lt;strong&gt;manipulación del DOM&lt;/strong&gt; y sobre &lt;strong&gt;eventos&lt;/strong&gt;, dos de las ideas más importantes en JavaScript ejecutado en el navegador.&lt;/p&gt;

&lt;h3&gt;
  
  
  Otras Maneras de Mostrar Mensajes
&lt;/h3&gt;

&lt;p&gt;Aparte de &lt;code&gt;console.log&lt;/code&gt;, JavaScript también proporciona ventanas emergentes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;¡Hola Mundo!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;         &lt;span class="c1"&gt;// Muestra un 'alert' en el navegador&lt;/span&gt;
&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;¿Cuál es tu nombre?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Solicita al usuario que ingrese un valor&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estas son bastante buenas para experimentar, pero en proyectos reales, los desarrolladores generalmente prefieren actualizar o modificar la página, o usar la consola.&lt;/p&gt;

&lt;h4&gt;
  
  
  Consejo Sobre Herramientas Para Desarrolladores
&lt;/h4&gt;

&lt;p&gt;La consola del navegador no solo sirve para registrar mensajes; también es donde aparecen errores y advertencias.&lt;br&gt;
Si algo no funciona, revisá primero la consola. Es tu mejor aliada para la depuración.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;En este punto&lt;/strong&gt;, ya entendés cómo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ejecutar JavaScript en el navegador&lt;/li&gt;
&lt;li&gt;Registrar mensajes y errores&lt;/li&gt;
&lt;li&gt;Interactuar con la página (manipulación del DOM)&lt;/li&gt;
&lt;li&gt;Gestionar eventos simples de usuario&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Esto ya sienta unas bases sólidas. A continuación, veamos cómo se puede ejecutar JavaScript &lt;em&gt;fuera del navegador&lt;/em&gt; con &lt;strong&gt;Node.js&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  JavaScript en Node.js
&lt;/h2&gt;

&lt;p&gt;Hasta ahora, hemos visto cómo se ejecuta JavaScript dentro del navegador. Pero JavaScript también puede ejecutarse &lt;em&gt;fuera del navegador&lt;/em&gt; gracias a &lt;strong&gt;Node.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt; es un &lt;strong&gt;entorno de ejecución&lt;/strong&gt; que te permite ejecutar JavaScript directamente en tu computadora. Esto es extremadamente potente, ya que te permite crear &lt;strong&gt;servidores backend&lt;/strong&gt;, &lt;strong&gt;APIs&lt;/strong&gt;, &lt;strong&gt;herramientas de procesamiento de archivos&lt;/strong&gt; y &lt;strong&gt;muchas más&lt;/strong&gt; funciones espectaculares que el navegador por sí solo no puede hacer.&lt;/p&gt;
&lt;h3&gt;
  
  
  Instalar Node.js
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Ir a &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;https://nodejs.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Descargar la versión &lt;strong&gt;Long-Term Support&lt;/strong&gt;, o &lt;strong&gt;LTS&lt;/strong&gt;. (recomendada para la mayoría de los usuarios)&lt;/li&gt;
&lt;li&gt;Instalar todo siguiendo el asistente de configuración (la configuración predeterminada está bien)&lt;/li&gt;
&lt;li&gt;Verificar la instalación abriendo la terminal (o símbolo del sistema) y escribiendo:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Si todo salió bien, debería imprimirse el número de versión instalada (por ejemplo: &lt;code&gt;v20.0.0&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;
  
  
  Tu Primer Script en Node.js
&lt;/h3&gt;

&lt;p&gt;Creamos una nueva carpeta y un archivo llamado &lt;code&gt;app.js&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="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hola Mundo Desde Node.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora, abrí la terminal y ejecutá el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El resultado que deberías ver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hola Mundo Desde Node.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;¡Felicitaciones!&lt;/em&gt; — Acabas de ejecutar JavaScript &lt;em&gt;fuera del navegador&lt;/em&gt; con &lt;strong&gt;Node.js&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  ¿Cuál Es La Diferencia?
&lt;/h3&gt;

&lt;p&gt;En el navegador, JavaScript tiene acceso al &lt;strong&gt;DOM&lt;/strong&gt; (estructura de la página web), eventos como &lt;em&gt;onclick&lt;/em&gt; y APIs específicas del navegador como &lt;em&gt;alert&lt;/em&gt; o &lt;em&gt;prompt&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;En &lt;strong&gt;Node.js&lt;/strong&gt;, esos recursos no existen. En cambio, Node te da acceso a cosas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El sistema de archivos (lectura/escritura de archivos)&lt;/li&gt;
&lt;li&gt;La información del sistema operativo de su computadora&lt;/li&gt;
&lt;li&gt;Redes (creación de servidores, gestión de solicitudes HTTP)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Un Ejemplo Simple de Servidor HTTP
&lt;/h3&gt;

&lt;p&gt;Una de las cosas más comunes que se hacen con Node.js es crear un servidor web simple. Acá tenés el ejemplo más pequeño usando el módulo http integrado de Node:&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;// server.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http&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;http&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;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeHead&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="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&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;text/plain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hola Mundo Desde Mi Servidor En Node.js!&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;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Servidor corriendo en http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejecutá el servidor con:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego, abrí el navegador y visitá &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&lt;br&gt;
Deberías ver lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hola Mundo Desde Mi Servidor En Node.js!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por ejemplo:&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%2Fqyvtbi8hmb61ddvtkzwy.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%2Fqyvtbi8hmb61ddvtkzwy.png" alt="Page screenshot" width="618" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, presioná &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;C&lt;/code&gt;  para detener el servidor y liberar el puerto.&lt;/p&gt;




&lt;p&gt;En este punto, ya tenés una comprensión básica de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cómo instalar y ejecutar &lt;strong&gt;Node.js&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;La diferencia entre ejecutar &lt;strong&gt;JavaScript en el navegador&lt;/strong&gt; y en &lt;strong&gt;Node.js&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Cómo crear y ejecutar tu primer servidor web sencillo en &lt;strong&gt;Node.js&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Conclusión
&lt;/h3&gt;

&lt;p&gt;En este artículo, aprendiste a ejecutar JavaScript en dos entornos diferentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro del &lt;strong&gt;navegador&lt;/strong&gt;, donde puede interactuar con páginas web, gestionar eventos de usuario y actualizar el DOM.&lt;/li&gt;
&lt;li&gt;Dentro de &lt;strong&gt;Node.js&lt;/strong&gt;, donde se ejecuta directamente en tu computadora y puede trabajar con archivos, redes y servidores.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es importante comprender ambos aspectos, ya que JavaScript es uno de los pocos lenguajes que pueden impulsar &lt;strong&gt;todo el stack web&lt;/strong&gt;, desde la interfaz de usuario hasta la lógica del servidor que se ejecuta detrás del telón.&lt;/p&gt;




&lt;p&gt;Gracias por tu tiempo.&lt;/p&gt;

&lt;p&gt;Si te interesa apoyar mis escritos, podés comprarme un café aquí: &lt;a href="https://paypal.me/martinxcvi" rel="noopener noreferrer"&gt;PayPal.me/martinxcvi&lt;/a&gt; ☕  &lt;/p&gt;




&lt;p&gt;Foto de portada por &lt;a href="https://unsplash.com/@growtika?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Growtika&lt;/a&gt; en &lt;a href="https://unsplash.com/photos/graphical-user-interface-qaedPly-Uro?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Getting Started with JavaScript: Browser and Node.js Basics</title>
      <dc:creator>Martín Aguirre</dc:creator>
      <pubDate>Mon, 08 Sep 2025 02:50:01 +0000</pubDate>
      <link>https://forem.com/martinxcvi/getting-started-with-javascript-browser-and-nodejs-basics-1gje</link>
      <guid>https://forem.com/martinxcvi/getting-started-with-javascript-browser-and-nodejs-basics-1gje</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;JavaScript is an object-oriented programming language, dynamically typed, and primarily effective for the development of interactive web projects. It can powerfully manipulate the structure of web pages and provides a wide range of features and flexibility. On the other hand, with the help of Node.js, it can also perform elegantly on the server as a backend development alternative to other languages, and excels at speed, asynchronism and modularity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browser vs Node.js
&lt;/h2&gt;

&lt;p&gt;JavaScript was originally created to run in the &lt;strong&gt;browser&lt;/strong&gt;, where it brings websites to life with interactivity, animations, and dynamic behavior. Every modern browser today has a built-in JavaScript engine that makes this possible.  &lt;/p&gt;

&lt;p&gt;But JavaScript is not limited to the browser. Thanks to &lt;strong&gt;Node.js&lt;/strong&gt;, it can also run directly on your computer, outside of any web page. This opened the door for JavaScript to be used on the &lt;strong&gt;backend&lt;/strong&gt;, powering servers, handling files, and building applications that go far beyond the browser.  &lt;/p&gt;

&lt;p&gt;In this article, we’ll explore both approaches. We’ll start with the browser, the traditional home of JavaScript, and then move on to Node.js to see how the same language can be used in a completely different environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript in The Browser
&lt;/h2&gt;

&lt;p&gt;The traditional way:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a folder&lt;/li&gt;
&lt;li&gt;Open it using a text editor (Visual Studio Code, as a main recommendation)&lt;/li&gt;
&lt;li&gt;Create an HTML file named &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a JavaScript file named &lt;code&gt;script.js&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add your code inside &lt;code&gt;script.js&lt;/code&gt; and connect it to the HTML file
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Minimum boilerplate HTML code&lt;/strong&gt; to copy and paste on your &lt;code&gt;index.html&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My First JavaScript Practice&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- JavaScript will be loaded at the bottom --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have a basic HTML structure, with a &lt;em&gt;script&lt;/em&gt; tag where the JavaScript code is injected with the help of the &lt;code&gt;src&lt;/code&gt; attribute where we reference the location of our &lt;code&gt;script.js&lt;/code&gt; file, which in this case is in the same folder as &lt;code&gt;index.html&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimum boilerplate JavaScript code&lt;/strong&gt; to copy and paste in your &lt;code&gt;script.js&lt;/code&gt; file:&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World from script.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now open the &lt;code&gt;index.html&lt;/code&gt; file in your browser.&lt;/p&gt;

&lt;p&gt;To see the result, open the &lt;strong&gt;Developer Tools console&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On Windows/Linux: press F12 or Ctrl + Shift + I&lt;/li&gt;
&lt;li&gt;On macOS: press Cmd + Option + I&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point, you should see "Hello World from script.js" printed in your browser's console.&lt;/p&gt;

&lt;p&gt;For example:&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%2Fcrp0uamkk0vhl97bvy1q.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%2Fcrp0uamkk0vhl97bvy1q.png" alt="Console message screenshot" width="614" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A Little More Interaction
&lt;/h3&gt;

&lt;p&gt;Printing to the console is a highly useful resource in JavaScript, but let’s actually change something on the page. Update your &lt;strong&gt;HTML's body&lt;/strong&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Welcome!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"changeText()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Click Me&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And inside &lt;code&gt;script.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;changeText&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;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You clicked the button!&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, when you open the page and click the button, the &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; text gets updated.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Congratulations!&lt;/em&gt; — You have just learned a little about &lt;strong&gt;DOM manipulation&lt;/strong&gt; and &lt;strong&gt;events&lt;/strong&gt;, two of the most important ideas in browser-based JavaScript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other Ways to Show Messages
&lt;/h3&gt;

&lt;p&gt;Besides &lt;code&gt;console.log&lt;/code&gt;, JavaScript also provides quick pop-ups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;// Shows a browser alert&lt;/span&gt;
&lt;span class="nf"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What is your name?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// Asks for user input&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are quite good for experimenting, but in real projects, developers usually prefer updating the page or using the console.&lt;/p&gt;

&lt;h4&gt;
  
  
  Developer Tools Tip
&lt;/h4&gt;

&lt;p&gt;The browser console isn’t just for logging messages; it’s also where errors and warnings will appear.&lt;br&gt;
If something doesn’t work, go and check the console first. It’s like your best friend when it comes to debugging.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;At this point&lt;/strong&gt;, you know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run JavaScript inside the browser&lt;/li&gt;
&lt;li&gt;Log messages and errors&lt;/li&gt;
&lt;li&gt;Interact with the page (DOM manipulation)&lt;/li&gt;
&lt;li&gt;Handle simple user events&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This sets a decent foundation. Next, let’s see how JavaScript can run &lt;em&gt;outside the browser&lt;/em&gt; with &lt;strong&gt;Node.js&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  JavaScript with Node.js
&lt;/h2&gt;

&lt;p&gt;So far, we’ve seen how JavaScript runs inside the browser. But JavaScript can also run &lt;em&gt;outside of the browser&lt;/em&gt; thanks to &lt;strong&gt;Node.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js&lt;/strong&gt; is a &lt;strong&gt;runtime environment&lt;/strong&gt; that allows you to execute JavaScript directly on your computer. This is extremely powerful because it enables you to build &lt;strong&gt;backend servers&lt;/strong&gt;, &lt;strong&gt;APIs&lt;/strong&gt;, &lt;strong&gt;file-processing tools&lt;/strong&gt;, &lt;strong&gt;and much more&lt;/strong&gt; incredible things that the browser alone cannot do.&lt;/p&gt;
&lt;h3&gt;
  
  
  Installing Node.js
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;https://nodejs.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Download the &lt;strong&gt;Long-Term Support&lt;/strong&gt; version, or &lt;strong&gt;LTS&lt;/strong&gt;. (Recommended for most users)&lt;/li&gt;
&lt;li&gt;Install it following the setup wizard (Default settings are fine)
&lt;/li&gt;
&lt;li&gt;Verify installation by opening your terminal (or command prompt), and typing:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If everything went as expected, it should print the installed version number (for example: &lt;code&gt;v20.0.0&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;
  
  
  Your First Node.js Script
&lt;/h3&gt;

&lt;p&gt;Let’s create a new folder and a file named app.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World from Node.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, open the terminal and run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output you should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World from Node.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Congratulations!&lt;/em&gt; — You’ve just run JavaScript &lt;em&gt;outside of the browser&lt;/em&gt; with &lt;strong&gt;Node.js&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  What’s the Difference?
&lt;/h3&gt;

&lt;p&gt;In the browser, JavaScript has access to the &lt;strong&gt;DOM&lt;/strong&gt; (web page structure), events like &lt;em&gt;onclick&lt;/em&gt;, and browser-specific APIs like &lt;em&gt;alert&lt;/em&gt; or &lt;em&gt;prompt&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Node.js&lt;/strong&gt;, those resources do not exist. Instead, Node gives you access to things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The file system (read/write files)&lt;/li&gt;
&lt;li&gt;Your computer’s operating system info&lt;/li&gt;
&lt;li&gt;Networking (create servers, handle HTTP requests)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  A Simple HTTP Server Example
&lt;/h3&gt;

&lt;p&gt;One of the most common things to do with Node.js is create a simple web server. Here’s the smallest example using Node’s built-in http module:&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;// server.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http&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;http&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;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeHead&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="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&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;text/plain&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World from my Node.js server!&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;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server is running at http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the server with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open your browser and visit &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;&lt;br&gt;
You should see the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello World from my Node.js server!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&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%2F9eoow8upio9t30vy1xol.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%2F9eoow8upio9t30vy1xol.png" alt="Web page message screenshot" width="614" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, press &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;C&lt;/code&gt; to stop the server and free the port.&lt;/p&gt;




&lt;p&gt;At this point, you now have an elementary understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to install and run &lt;strong&gt;Node.js&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The difference between running &lt;strong&gt;JavaScript in the browser&lt;/strong&gt; vs in &lt;strong&gt;Node.js&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;How to create and run your first simple &lt;strong&gt;Node.js&lt;/strong&gt; web server&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In this article, you’ve learned how to run JavaScript in two different environments:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inside the &lt;strong&gt;browser&lt;/strong&gt;, where it can interact with web pages, handle user events, and update the DOM.
&lt;/li&gt;
&lt;li&gt;Inside &lt;strong&gt;Node.js&lt;/strong&gt;, where it runs directly on your computer and can work with files, networks, and servers.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding both sides is important, because JavaScript is one of the few languages that can power the &lt;strong&gt;entire web stack&lt;/strong&gt; — from the user's interface, to the server logic running in the background.&lt;/p&gt;




&lt;p&gt;Thank you for your time! &lt;/p&gt;

&lt;p&gt;If you’d like to support my writing, you can buy me a coffee here: &lt;a href="https://paypal.me/martinxcvi" rel="noopener noreferrer"&gt;PayPal.me/martinxcvi&lt;/a&gt; ☕  &lt;/p&gt;




&lt;p&gt;Cover photo by &lt;a href="https://unsplash.com/@growtika?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Growtika&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/graphical-user-interface-qaedPly-Uro?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

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