CursosEmpresasBlogLiveConfPrecios

Uso correcto de var, let y const

Clase 4 de 24 • Curso de Clean Code y Buenas Prácticas con JavaScript

Clase anteriorSiguiente clase

Contenido del curso

Introducción al Clean Code
  • 1
    Deuda técnica y refactorización de código

    Deuda técnica y refactorización de código

    07:03
  • 2
    Reglas del diseño simple

    Reglas del diseño simple

    02:49
  • 3
    Qué es Clean Code

    Qué es Clean Code

    02:18
Nombre y uso de las variables
  • 4
    Uso correcto de var, let y const

    Uso correcto de var, let y const

    12:13
  • 5
    Reglas para la nomenclatura

    Reglas para la nomenclatura

    05:33
  • 6
    Cómo nombrar según el tipo de dato

    Cómo nombrar según el tipo de dato

    11:50
  • 7

    Nombres de Variables y Funciones Correctos en JavaScript

    00:28
Ámbito de las variables
  • 8
    Ámbito global

    Ámbito global

    02:40
  • 9
    Ámbito local o de función

    Ámbito local o de función

    03:40
  • 10
    Ámbito de bloque

    Ámbito de bloque

    05:39
  • 11
    Ámbito estático

    Ámbito estático

    04:17
  • 12
    Hoisting

    Hoisting

    07:42
Funciones
  • 13
    Declaración y expresión de funciones

    Declaración y expresión de funciones

    03:52
  • 14
    Parámetros y argumentos

    Parámetros y argumentos

    16:04
  • 15
    Funciones de flecha y el this

    Funciones de flecha y el this

    10:01
Clases
  • 16
    POO con ES6 (constructores, métodos y herencia)

    POO con ES6 (constructores, métodos y herencia)

    07:40
  • 17
    Herencia en JavaScript

    Herencia en JavaScript

    09:45
  • 18
    Tamaño reducido (responsabilidad única)

    Tamaño reducido (responsabilidad única)

    06:36
  • 19
    Organización

    Organización

    03:23
Optimizaciones
  • 20
    Cuándo usar comentarios

    Cuándo usar comentarios

    04:09
  • 21
    Formato coherente (codear en equipos)

    Formato coherente (codear en equipos)

    03:37
  • 22
    Principio DRY

    Principio DRY

    06:02
  • 23

    Tipos de Algoritmos y Complejidad Big O en JavaScript

    03:09
Cierre
  • 24
    Sigue aprendiendo JavaScript

    Sigue aprendiendo JavaScript

    00:55
    LEONARD CUENCA

    LEONARD CUENCA

    student•
    hace 3 años

    Clase 4: Uso correcto de var, let y const

    Notas

    • ECMAScript 6 2015 -> introducjo let y const
    • var -> no respeta ambitos de bloque
    • let -> si respeta ambitos de bloque
    • const -> valores que no cambian NUNCA pero pueden cambiar por referencia, pero la constante en sí no puede ser reasignada
    // var var age = 28; { console.log("Valor dentro del bloque", age); // 28 var age = 29; } console.log("Valor fuera del bloque", age); // 29 age = age * 2; console.log("Valor cambiado", age); // 58 // let let age = 28; { console.log("Valor dentro del bloque", age); // error let age = 29; } console.log("Valor fuera del bloque", age); // 28 age = age * 2; console.log("Valor cambiado", age); // 56 // const const PI = 3.14159; PI = PI * 2; // error console.log("Valor cambiado", PI); // no se ejecuta
      Maria Alejandra Luna Tito

      Maria Alejandra Luna Tito

      student•
      hace 4 meses

      const tmb respeta el ambito de bloque, lo que no se es si es recomendable repetir el nombre de la constante en un bloque

      ´´´js

      const age = 28;console.log("valor: ", age); { const age = 30; console.log("valor: ", age);} console.log("valor: ", age);age = age * 2; console.log("valor: ", age);

      ´´´

    Carina Payleman

    Carina Payleman

    student•
    hace 3 años

    Recomiendo este curso breve donde se explica muy clarito también las diferencias entre "var", "let" y "const" y las características a profundidad de c/u: https://platzi.com/cursos/javascript-closures-scope/

    Kevin Ivan Garcia Hernandez

    Kevin Ivan Garcia Hernandez

    student•
    hace 2 años

    Es bueno señalar que en let respeta el ámbito de bloque, pero esto no evita que no se pueda acceder a una variable letra desde dentro de un bloque. El error que lanza aquí es que hay una variable let con el mismo nombre dentro de ese bloque, pero si la quitamos, el primer console.log podría acceder a la primer variable age que se declara en el ámbito global. Los bloques definidos por los corchetes pueden acceder a variables externas si no cuentan con una del mismo nombre, pero desde afuera no se puede acceder a las variables declaradas o inicializadas dentro de los bloques

    Paulina Ignacio Sanvicente

    Paulina Ignacio Sanvicente

    student•
    hace 3 años

    var - no respeta ambitos de bloque

    let - si respeta ambitos de bloque

    const - valores que no cambian NUNCA

      Billy  Torres

      Billy Torres

      student•
      hace 3 años

      Es importante recordar que los valores almacenados en una constante pueden cambiar por referencia, pero la constante en sí no puede ser reasignada. Ojo con eso, que es pregunta tipica de entrevistas

    Maday Choque

    Maday Choque

    student•
    hace 2 años
    let age = 28 { console.log('valor dentro del bloque', age); let age = 29; }

    // sale ReferenceError: Cannot access 'age' before initialization

    El primer console.log no imprime el valor 28 porque ocurre un hoisting en JavaScript. El hoisting es un comportamiento donde las declaraciones de variables (pero no las asignaciones) se mueven al principio del ámbito en el que se encuentran. Debido al hoisting, la declaración de la segunda variable age se mueve al principio del bloque, por lo que cuando se ejecuta la línea 2 del console.log dentro del bloque, la variable age todavía no ha sido asignada y su valor es undefined

    Alan Dell Oso

    Alan Dell Oso

    student•
    hace 2 años

    Me parece importante aclarar que en el ejemplo de let, cuando se llama a la variable variable global dentro del bloque y da error, es porque se está declarando otra variable con el mismo nombre dentro del bloque (después del console.log). Podríamos tranquilamente acceder al valor de una variable let declarada globalmente desde adentro de un bloque, siempre y cuando no volvamos a declararla dentro del mismo.

      Sandra Rosa Arroyo Paredes

      Sandra Rosa Arroyo Paredes

      student•
      hace un año

      Exacto! Entrega un referenceError para el caso de let y const, ya que no se inizializan. En el caso de var entregaria undefined, ya que a estas su kas inicializa.

    Oscar Agustin Flores Arana

    Oscar Agustin Flores Arana

    student•
    hace 3 años

    El valor dentro del bloque será siempre el que se le asigne el valor fuera del bloque imprimirá el valor del primer let y como resultado del valor cambiado será el producto de 28

      Brandon Lee Aguero Fernandez

      Brandon Lee Aguero Fernandez

      student•
      hace 2 años

      Hola, veo que estas respondiendo a los ejercicios de clase, creo. Si es así, esto debería de estar en la sección de APORTES de la clase.

    Alex Condori Condori

    Alex Condori Condori

    student•
    hace 3 años

    Alguien sabe la tipografia o theme que esta usando en el vscode??

      Alex Camacho

      Alex Camacho

      teacher•
      hace 3 años

      Es una variante de AYU con Victor Mono como fuente.

      Reinaldo Mendoza

      Reinaldo Mendoza

      student•
      hace 3 años

      Ya decia yo que me parecia ayu

    Irving Juárez

    Irving Juárez

    student•
    hace 2 años

    let y var, aunque parezcan muy diferentes, realmente no lo son. Son exactamente lo mismo, solo que el engine de JS las trata de manera distinta. . Toma en cuenta los siguientes bloques de código

    { console.log("Value inside the block:", age); // Error ❌ let age = 22; } { console.log("Value inside the block:", age); // undefined var age = 22; }

    Lo que pasa por debajo, es que cada que se crea un nuevo "bloque", se crea un nuevo contexto de ejecución, justo como el que se crea de manera global. Entonces, este contexto lo que hace es primero, agregar todas las variables y funciones en la memoria, por esta razón ocurre el hoisting. . En el ejemplo de arriba, en ambos contextos de ejecución, la variable "age" existe en memoria desde antes de que se ejecute cualquier línea de código. A esta variable se le da un valor de "undefined". Sin embargo, el engine de JS trata a las variables de manera distinta, según si fueron declaradas con let o con var. . En case de que fueron declaradas con let, el engine de JS no deja que se pueda acceder a esta variable antes de que haya sido declarada explicitamente en el código, por eso nos da un error. . En el caso de var, si nos deja acceder a esta variable, que es "undefined", por lo que no nos da ningún tipo de error.

      Karen Benites Segura

      Karen Benites Segura

      student•
      hace 8 meses

      Quisiera dar una pequeña aclaración, ya que al menos a mí me ayudó a entender mejor. "Declarar explícitamente" lo entiendo como escribir directamente:

      let myVariable; ```Independientemente de si asignamos un valor o no a esa variable en esa línea. Recordemos que podría simplemente declarar una variable y asignarle un valor después. Si hacemos eso con **let**, JS por defecto interpreta el valor de esa variable como "no inicializado" si se declara con **let** o **const**. Si se declara con var, JS le asigna por defecto **undefined** a esa variable. Entonces, cuando ocurre el hosting dentro del bloque, JS mueve SÓLO las declaraciones de las variables arriba del bloque, no mueve sus valores. Entonces,  ```js { console.log('age'); let age =29; } ```es lo mismo que decir: ```js { let age; console.log(age); age = 29; } ```Asi, al ejecutar ese código, js lo ejecuta por orden; y en la linea 3, age no tiene ningun valor asignado y por lo tanto para JS es "no inicializado". Por eso sale el error. Ahora, si se hace con var: ```js { console.log(age); var age =29; } ```seria lo mismo que: ```js { var age; // age = undefined console.log(age); age =28; } ```Asi, al ejecutar la linea 3, age si tiene un valor por defecto: undefined. Por eso, se imprime el valor sin problemas.
    Israel Blas

    Israel Blas

    student•
    hace 3 años

    Como recomendaciones:

    • Nunca usen var.
    • Usen let cuando vayan a redeclarar el valor en la variable.
    • Usen const para constantes, cuando no es necesario redeclarar la variable. Por ejemplo: Al usar librerías, al crear funciones u objetos, etc.
    Andrés Buelvas

    Andrés Buelvas

    student•
    hace 3 años

    Como var no tiene en cuentas los bloques o scopes, en este ejemplo imprime: 28 29 58 Primer comment en un curso 😁

    Johan Sebastian

    Johan Sebastian

    student•
    hace 4 meses
    // Uso de let let age1 = 28 { // Este console log imprime error. console.log('valor dentro del bloque', age1); let age1 = 29 } // Este consolo log imprime 28. console.log('valor fuera del bloque', age1) age1 = age1 * 2; // Este console log imprime 56 console.log('valor cambiado', age1)
    Johan Sebastian

    Johan Sebastian

    student•
    hace 4 meses
    var age = 28 { // Este console log imprime 28. console.log('valor dentro del bloque', age); var age = 29 } // Este consolo log imprime 29 console.log('valor fuera del bloque', age) age = age * 2; // Este console log imprime 58 console.log('valor cambiado', age)
    Oscar Agustin Flores Arana

    Oscar Agustin Flores Arana

    student•
    hace 3 años

    ¿Por qué, si la función dice "crearGato"? al asignarle otros parámetros como se ve en el código, el sistema responde y no genera error function crearGato(nombre, edad) { var perro = { nombre: nombre, edad: edad, meow: function() { return "Meow!"; } }; return perro; }

      Francisco Ponce

      Francisco Ponce

      student•
      hace 3 años

      Es posible asignarle cualquier nombre de parámetro a una función en JavaScript, independientemente del nombre de la función en sí. En el código que proporcionaste, la función se llama "crearGato", pero los parámetros que recibe son "nombre" y "edad", lo que podría generar cierta confusión.

      En este caso, la función "crearGato" simplemente crea un objeto "perro" (por qué quieres un perro si tu función está creando un gato) que tiene una propiedad "nombre" y "edad", y un método "meow" que retorna "Meow!". Aunque el nombre de la función es "crearGato", esto no afecta la lógica del código.

      Por lo tanto, asignar los parámetros "nombre" y "edad" a la función "crearGato" no generará un error, ya que son simplemente variables que se utilizan para definir las propiedades del objeto "perro" que se está creando dentro de la función. Sin embargo, es una buena práctica nombrar los parámetros de una función de manera coherente con su propósito, para que sea más fácil de entender y mantener el código en el futuro.

      El código no lo haces para ti, sino para ser leído por los demás. El código como lo tienes va a generar más preguntas por tu futuro equipo.

    David Elias Gatica Morales

    David Elias Gatica Morales

    student•
    hace un año

    Mi suposición es que el primero console imprime 28, el segundo 28 tambien y el tercero el doble de 28

    Kyb3r Cipher

    Kyb3r Cipher

    student•
    hace un año

    Imprimira:

    1. 28
    2. 29
    3. 58
    Ana Rotela Cabrera

    Ana Rotela Cabrera

    student•
    hace un año

    Ejemplo de uso de var - age

    Miguel Enrique Velásquez Millán

    Miguel Enrique Velásquez Millán

    student•
    hace un año

    Pensé que el console.log de la línea 5 no daría error y mostraría simplemente 28 ya que, si bien estamos declarando una variable age en la línea de debajo... La variable age de la línea 2 está declarada de forma global por lo que cualquiera debería poder usarla incluso si se encuentra dentro de otro bloque de código.

    Por lo visto, si en el bloque de código estamos declarando una nueva variable con el mismo nombre que una variable global de fuera, dentro del bloque de código la que se usa es la que se declara dentro incluso cuando la usamos antes de la declaración en sí misma.

    En otras palabras, si el código no tuviera la declaración de la variable age en la línea 6, no daría error y se imprimiría 28, pero como la tiene, ese bloque en concreto asume que el age que se está llamando en el console.log es la declarada en la línea de abajo y no el age global de fuera.

    Daniel Andres Rojas Paredes

    Daniel Andres Rojas Paredes

    student•
    hace un año

    el ambito de bloque es lomismo que o entra dentro de la categoria de scope? o contexto? porque como lo entendi cuando estaba entendiendo el this en js es que var es para el contexto global y let para los scope locales, sin embargo habia entendido(la coscina del codigo se llama el canal de youtube) que estos contextos eran creados con el llamado o declaracion de una funcion, no con la instanciacion de objetos, pero lo planteado en esta clase me hace caer en cuenta que ambos, objetos y funciones son "delimitados " por {llaves} de ahi mi duda . el ambito de bloque es lomismo que o entra dentro de la categoria de scope? o contexto?

    Sandra Rosa Arroyo Paredes

    Sandra Rosa Arroyo Paredes

    student•
    hace un año

    Declaración y Scope:

    • var: Function-scoped o global-scoped.
    • let y const: Block-scoped.

    Hoisting:

    • var: Se eleva al inicio de su scope, inicializada como undefined.
    • let y const: Se elevan pero no se inicializan (Temporal Dead Zone). Entrega ReferenceError.

    Reasignación:

    • var y let: Permiten reasignación.
    • const: No permite reasignación, pero los objetos/arrays pueden ser mutados.

    Temporal Dead Zone (TDZ):

    • Afecta a let y const.
    • Periodo entre el inicio del bloque y la declaración de la variable.

    Rendimiento:

    • const puede permitir optimizaciones del motor JS.
    • Acceder a variables en el scope local es más rápido que en scopes externos.

    Uso de memoria:

    • var en el scope global puede permanecer en memoria durante toda la ejecución.
    • let y const se liberan cuando sale del scope.

    Buenas prácticas:

    • Preferir const para valores que no se reasignarán.
    • Usar let para variables que se reasignarán.
    • Evitar var en código moderno.

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads