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 min
  • 2
    Reglas del diseño simple

    Reglas del diseño simple

    02:49 min
  • 3
    Qué es Clean Code

    Qué es Clean Code

    02:18 min

Nombre y uso de las variables

  • 4
    Uso correcto de var, let y const

    Uso correcto de var, let y const

    Viendo ahora
  • 5
    Reglas para la nomenclatura

    Reglas para la nomenclatura

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

    Cómo nombrar según el tipo de dato

    11:50 min
  • 7

    Nombres de Variables y Funciones Correctos en JavaScript

    00:28 min

Ámbito de las variables

  • 8
    Ámbito global

    Ámbito global

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

    Ámbito local o de función

    03:40 min
  • 10
    Ámbito de bloque

    Ámbito de bloque

    05:39 min
  • 11
    Ámbito estático

    Ámbito estático

    04:17 min
  • 12
    Hoisting

    Hoisting

    07:42 min

Funciones

  • 13
    Declaración y expresión de funciones

    Declaración y expresión de funciones

    03:52 min
  • 14
    Parámetros y argumentos

    Parámetros y argumentos

    16:04 min
  • 15
    Funciones de flecha y el this

    Funciones de flecha y el this

    10:01 min

Clases

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

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

    07:40 min
  • 17
    Herencia en JavaScript

    Herencia en JavaScript

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

    Tamaño reducido (responsabilidad única)

    06:36 min
  • 19
    Organización

    Organización

    03:23 min

Optimizaciones

  • 20
    Cuándo usar comentarios

    Cuándo usar comentarios

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

    Formato coherente (codear en equipos)

    03:37 min
  • 22
    Principio DRY

    Principio DRY

    06:02 min
  • 23

    Tipos de Algoritmos y Complejidad Big O en JavaScript

    03:09 min

Cierre

  • 24
    Sigue aprendiendo JavaScript

    Sigue aprendiendo JavaScript

    00:55 min
  • Tomar el examen del curso
    • 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 5 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 3 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 3 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 😁

      Stiven Trujillo

      Stiven Trujillo

      student•
      hace 18 días

      Que tipografia utilizas en el editor?

      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?

    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