Curso de Closures y Scope en JavaScript

Reasignación y redeclaración

Curso de Closures y Scope en JavaScript

Contenido del curso

Bienvenida

  • 1
    Bienvenida al Curso de Closures y Scope

    Bienvenida al Curso de Closures y Scope

    01:11 min

Tipos de scope en JavaScript

  • 2
    Global Scope

    Global Scope

    12:09 min
  • 3
    Function Scope

    Function Scope

    05:52 min
  • 4
    Block Scope

    Block Scope

    07:16 min
  • 5
    Reasignación y redeclaración

    Reasignación y redeclaración

    Viendo ahora
  • 6
    Strict Mode

    Strict Mode

    05:54 min

Closure

  • 7
    ¿Qué es un Closure?

    ¿Qué es un Closure?

    09:37 min
  • 8
    Practicando Closures

    Practicando Closures

    15:24 min

Hoisting

  • 9
    ¿Qué es el Hoisting?

    ¿Qué es el Hoisting?

    08:28 min

Debugging

  • 10
    Debugging

    Debugging

    04:33 min

Cierre

  • 11
    Conclusiones

    Conclusiones

    03:23 min
schoolTomar examen
search
CursosEmpresasBlogLiveConfEventosPrecios

0:00/14:05

Reasignación y redeclaración

Curso de Closures y Scope en JavaScript

Clase 5 de 11

Clase 5 / 11

Progreso del curso

Bienvenida

  • 1

    Bienvenida al Curso de Closures y Scope

    01:11

Tipos de scope en JavaScript

  • 2lock

    Global Scope

    Suscríbete para ver más
  • 3lock

    Function Scope

    Suscríbete para ver más
  • 4lock

    Block Scope

    Suscríbete para ver más
  • play_arrowlock

    Reasignación y redeclaración

    play_circleViendo ahora
  • 6lock

    Strict Mode

    Suscríbete para ver más

Closure

  • 7lock

    ¿Qué es un Closure?

    Suscríbete para ver más
  • 8lock

    Practicando Closures

    Suscríbete para ver más

Hoisting

  • 9lock

    ¿Qué es el Hoisting?

    Suscríbete para ver más

Debugging

  • 10lock

    Debugging

    Suscríbete para ver más

Cierre

  • 11lock

    Conclusiones

    Suscríbete para ver más
workspace_premiumTomar examen

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

Comentarios (107)107 comentarios

Recursos

La redeclaración es volver a declarar una variable, y la reasignación es volver a asignar un valor.

  • Una variable declarada con var puede ser redeclarada y reasignada.
  • Una variable declarada con let puede ser reasignada, pero no redeclarada.
  • Una variable declarada con const no puede ser redeclarada, ni reasignada. Su declaración y asignación debe ser en una línea, caso contrario habrá un error.

Existe un curso de ECMAScript 6+ para que descubras las nuevas características que agregan al lenguaje.

Ejemplos de redeclaración y reasignación de variables

// Con var var nombre // declaración (undefined) ✅ nombre = "Andres" // asignación ✅ nombre = "Valeria" // reasignación ✅ var nombre = "Oscar" // redeclaración y reasignación ✅ // Con let let nombre // declaración (undefined) ✅ nombre = "Andres" // asignación ✅ nombre = "Valeria" // reasignación ✅ let nombre = "Oscar" // SyntaxError: Identifier 'nombre' has already been declared. ❌ // Con const const nombre // SyntaxError: Missing initializer in const declaration. ❌ const nombre = "Andres" // declaración y asignación ✅ nombre = "Valeria" // TypeError: Assignment to constant variable. ❌ const nombre = "Oscar" // SyntaxError: Identifier 'nombre' has already been declared. ❌

Estructuras de datos declaradas con const

Las estructuras de datos, como los arrays u objetos, declaradas con const pueden cambiar las referencias de sus elementos, a este concepto se lo denomina mutabilidad. Sin embargo, siguen las mismas reglas ya mencionadas, no puedes redeclarar ni reasignar una variable de estructura de datos.

const array = ["manzana", "pera"] // declaración y asignación ✅ array[0] = "piña" // Cambio de valor en un elemento del array console.log(array) // [ 'piña', 'pera' ] const array = [1,2,3] // SyntaxError: Identifier 'array' has already been declared. ❌

En React, una librería de JavaScript, puedes utilizar declaraciones con const para el estado de un componente, porque aunque cambie el valor, lo que sucede internamente es un re-renderizado y no una redeclaración. No te preocupes si no lo entiendes, pero tenlo presente cuando llegues a ese tema.

Contribución creada por: Andrés Guano.

Edgardo Molina Gonzalez

Edgardo Molina Gonzalez

Hace 4 años
    Dario Paladines

    Dario Paladines

    Hace 4 años
    Sebastian Flores Guasace

    Sebastian Flores Guasace

    Hace 4 años
Alfredo Olmedo

Alfredo Olmedo

Hace 4 años
    Rafael Martínez Rodríguez

    Rafael Martínez Rodríguez

    Hace 4 años
    Jhon Edward Quipo Baron

    Jhon Edward Quipo Baron

    Hace 3 años
Robert Alexander Machado Espinoza

Robert Alexander Machado Espinoza

Hace 4 años
    Benjamin Nahuel Quevedo

    Benjamin Nahuel Quevedo

    Hace 4 años
Cristian Fernando Villca Gutierrez

Cristian Fernando Villca Gutierrez

Hace 4 años
José Isidro Torres Caldea

José Isidro Torres Caldea

Hace 4 años
    Idequel Bernabel Alvarez

    Idequel Bernabel Alvarez

    Hace 4 años
    Bryan Andres Vera Garcia

    Bryan Andres Vera Garcia

    Hace 4 años
César Palma

César Palma

Hace 4 años
    Francisco Ponce

    Francisco Ponce

    Hace 4 años
    Sebastian Flores Guasace

    Sebastian Flores Guasace

    Hace 4 años
Lider Simeon Falera Gonzales

Lider Simeon Falera Gonzales

Hace 4 años
    Beder Danilo Casa Condori

    Beder Danilo Casa Condori

    Hace 2 años
Victor Miguel Barrera Peña

Victor Miguel Barrera Peña

Hace 4 años
Cristian Ruben Pereyra

Cristian Ruben Pereyra

Hace 4 años
    José Antonio Medina Sánchez

    José Antonio Medina Sánchez

    Hace 4 años
    Oscar Barajas Tavares

    Oscar Barajas Tavares

    Team Platzi
    Hace 4 años
Juan David Sánchez

Juan David Sánchez

Hace 4 años
    Guadalupe Monge Barale

    Guadalupe Monge Barale

    Hace 4 años
    Jesús De Avila

    Jesús De Avila

    Hace 4 años
Cesar Omar Vargas Gutierrez

Cesar Omar Vargas Gutierrez

Hace 4 años
Erika Nathaly Bernal Morales

Erika Nathaly Bernal Morales

Hace 4 años
Lucas Rojas

Lucas Rojas

Hace 4 años
Brahyan Antonio Martinez Madera

Brahyan Antonio Martinez Madera

Hace 4 años
Carlos Andrés Padilla Arroyo

Carlos Andrés Padilla Arroyo

Hace 4 años
    Gabriela Mabel Mignone

    Gabriela Mabel Mignone

    Hace 4 años
    Dario Paladines

    Dario Paladines

    Hace 4 años
Andres David Sanchez

Andres David Sanchez

Hace 4 años
Juan Fernando Yepes Muñoz

Juan Fernando Yepes Muñoz

Hace 4 años
    Guadalupe Monge Barale

    Guadalupe Monge Barale

    Hace 4 años
Juan Gómez

Juan Gómez

Hace 4 años
    Guadalupe Monge Barale

    Guadalupe Monge Barale

    Hace 4 años
    silfredo mario

    silfredo mario

    Hace 4 años
Harold José Arguello

Harold José Arguello

Hace 4 años
Edil Guardado

Edil Guardado

Hace 3 meses

Que buen curso actualizado, buena definición y calidad del vídeo y explicación. Ya no puedo esperar a la actualización del curso de asincronismo.

Igual, me quedé con algunas dudas con ese curso, por lo que estoy esperando que salga para revisarlo de nuevo

Creo que ese curso ya está actualizado

const-and-let-chart.png

Muchas gracias.

👍

En el caso de los Arrays en JavaScript se le puede hacer push, declarandolo con const no solo por que se pueda y ya. En realidad Javascript meneja los Arrays Dinamicos, en otros lenguajes los arrays se pueden hacer estaticos y allí no se puede agregar. Esto tiene que ver con la capacidad de memoria asignada a los arrays, en el caso de los dinamicos la asignacion de memoria se dobla y en el caso de los estaticos, es solo la memoria que se le asigna desde el inicio. Esto lo aprendí en el curso de estructura de datos con Javascript que imparte Diego de granda.

Wow, esto lo había notado en un curso de JuanDC que hice ayer y me extrañaba que podías agregar elementos al array declarado con Const, super!

Mis notas:

  • Declaración de variables: reservar un espacio en memoria para la variable en si.
  • Re-declaración de variables: volver a declarar una variable previamente existente.
  • Asignación de variables: darle un valor a dicho espacio de memoria reservado.
  • Re-asignación de variables: darle un nuevo valor a una variable.

  • var, es posible realizar solo una declaración, el valor de la variable será undefiend pero no arrojará ningún error.
  • var, es posible re-declarar y re-asignar valores.

  • let, es posible re-asignar pero no re-declarar.

  • const es una de las mejores maneras de manipular variables puesto que tiene reglas mas robustas que var y let
  • const, no puedes re-asignar ni re-declarar tipos de datos primitivos.
  • const, puedes re-asignar arreglos y objetos pero no re-declararlos.
  • const, tampoco puedes solo declararla, necesita una asignación.

Como la palabra reservada lo indica, const hace referencia a un valor que no va a cambiar (o que no debería cambiar), por lo que al intentar reasignar el valor que tenga una variable de tipo constante vamos tener un error. 💥 . const se usa mucho para declarar funciones u objetos (una función también es considerada un objeto dentro de JavaScript), ya que los objetos pueden almacenar más de un único valor, a diferencia de los tipos primitivos (int, float, string...). Los objetos pueden almacenar muchos valores, así que solo se guarda la referencia en memoria que los almacena (una dirección que no cambia) y con esta se accede al valor o valores que ahí residen. . Es como si una variable de tipo primitivo fuese una caja pequeña donde solo te cabe una cosa, mientras que un objeto es como un escaparate o armario (no sé cómo le llames), donde puedes guardar varias cosas. . Cuando usamos const para declarar una variable primitiva imagina que estamos creando un molde específico para guardar solo ese valor, que cualquier otra cosa que intentemos meter ahí no se va a poder porque no cabe. Bien, cuando usamos const para un objeto, el comportamiento se ve un poco diferente, ya que como ahí podemos meter varias cosas es más fácil apuntar a una ubicación que no cambie y ahí meter lo que quepa. 😅 . Vayamos a un ejemplo: Tenemos una caja pequeña con un diseño único, donde solo cabe tu reloj de edición limitada. También tienes un armario grande donde guardas ropa, perfumes, zapatos, e inclusive una caja que contenga un reloj adentro. Ahora, vamos a suponer que le pedimos el favor a alguien de traernos el reloj de edición limitada, podemos expresar la ubicación del reloj diciendo que está en su caja. Ahora para que me busque algo que está en el armario, supongamos el perfume, voy a decir de forma general que está en el armario, que en ese objeto más grande busque lo que yo le pedí, y bueno, si soy organizado y tengo la decencia de ser más específico puedo decir que está en la gaveta del armario que tengo marcada como número 2 y así conseguir lo que necesitaba. ✌🏻 Dentro del armario yo puedo meter, cambiar y quitar cosas, eso no cambiará la ubicación del armario, ya que sigue siendo constante. 😉

Muy buena analogía! 🤓

Que gran explicación, Crack

la regla de tontos a partir de ES6 es declara cualquier variable con const y si te da problemas redeclarala con let. Para iniciar está regla funciona muy bien. Luego con la practica uno sabe cuando debe ir let o const.

La súper vieja confiable jajaja

O simplemente declarar con const a aquellas variables que sabemos que no van a cambiar

Sobre "const" con Arrays.

interesante

la verdad es molesta la nueva intro de platzi, me gustaba más la anterior, de sólo sonido, esta te deja sordo

¿Qué extensión usa Oscar para que muestren las alertas de color rojo en los posibles errores?

Es la extensión quokka.js

Utilizo: Error Lens

Algo similar a lo que pasa con los arreglos también ocurre con los objetos.   Por ejemplo, podemos inicializar un objeto de la siguiente forma:

const person = {};

E ir mutando sus propiedades sin problema alguno:

person.name = "David"; person.username = "d4vsanchez"; console.log(`${person.name} (@${person.username})`); person.name = "Someone else"; person.username = "someone"; console.log(`${person.name} (@${person.username})`);

Si ejecutamos esto obtendremos:

David (@d4vsanchez) Someone else (@someone)

Por lo que debemos recordar que el const no creará variables inmutables sino que creará una "atadura" inmutable. Una frase que me ayudó a entender ese concepto es: "const won't create immutable variables, const will create immutable bindings".     Tip extra: Si quieren crear un objeto inmutable, pueden pasarlo por el método Object.freeze.

const person = { name: "David", username: "d4vsanchez" }; Object.freeze(person); person.name = "Someone else"; person.username = "someone"; console.log(`${person.name} (@${person.username})`); // David (@d4vsanchez)

Muchas gracias. Muy clarito

¡Excelente dato! Gracias

Se introdujeron en ECMAScript 6 y tienen las siguientes características:

  • var:

    • se puede acceder desde cualquier lugar del scope (es global)
    • se puede redeclarar
    • se puede reasignar
  • let:

    • esta limitada por el scope donde es declarada
    • NO se puede redeclarar en el mismo scope
    • se puede reasignar
  • const:

    • esta limitada por el scope donde es declarada
    • NO se puede redeclarar en el mismo scope
    • NO se puede reasignar Nota: se pueden utilizar métodos como push o pop para los arrays debido a que los métodos hacen referencia a la constante declarada y no la están redeclarando o reasignando.

En conclusión, gana const.

Me encanta la actitud del profe, la forma tan profesional de explicar y su metodología. Realmente vine aquí porque quiero profundizar sobre el tema de Scope y variables, y estoy muy a gusto porque he entendido paso a paso. Graciaaaaaas!! 💚😀

Screenshot_20.jpg

La extension que usa para que se vea el error en la misma linea es Error Lens, este es el link

En otros cursos, no recuerdo si en platzi pero si cuando veía algunos videos de youtube no hablaban de asignación sino de inicialización. Me queda la duda de cual sería la diferencia o cual debe utilizarse. Yo personalmente me iré por la palabra asignación. Sin embargo, me queda esa duda.

Según tengo entendido inicializar una variable es la asignación de un valor inicial a dicha variable.

Si no estoy mal en el curso básico de Javascript se adopta el término de inicialización, pero según entiendo la asignación es igual que la inicialización, por lo que son dos maneras de llamar a lo mismo.

Error Lens

Screenshot 2022-11-25 104600.png
la extension que muestra errores al lado, por si se lo preguntan

Me parece demasiado cool ver que los comentarios no son de hace tanto tiempo como en otros cursos que eran de hace 2 años o mas, da una sensación como de que el curso esta mas vivo. Y no es que en los otros no hubiera comentarios nuevos, pero los mas destacados eran antiguos y no se, es diferente la sensación. Tekiero mucho comunidad de Platzi <3

Me pasa lo mismo.

Cómo hacer inmutables los atributos de los objetos y arreglos?

Acá un compa lo explica

const fruta = { name: "banano", apodo: "guineo" } Object.freeze(fruta);

Si usas object.feeze(fruta), lo haces inmutable.

No se puede reasignar otro valor a una contante.

Cuando usas una Constante ya no puedes re-asignarle otro valor. El valor es constante, ya no puede carmbiar.