CursosEmpresasBlogLiveConfPrecios

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

    14:05 min
  • 6
    Strict Mode

    Strict Mode

    05:54 min

Closure

  • 7
    ¿Qué es un Closure?

    ¿Qué es un Closure?

    09:37 min
  • 8
    Playground: Crea un Closure para Sumar

    Playground: Crea un Closure para Sumar

  • 9
    Practicando Closures

    Practicando Closures

    15:24 min
  • 10
    Playground: Closure para Almacenar Datos de Mascotas

    Playground: Closure para Almacenar Datos de Mascotas

    Viendo ahora

Hoisting

  • 11
    ¿Qué es el Hoisting?

    ¿Qué es el Hoisting?

    08:28 min

Debugging

  • 12
    Debugging

    Debugging

    04:33 min

Cierre

  • 13
    Conclusiones

    Conclusiones

    03:23 min
Tomar examen

Playground: Closure para Almacenar Datos de Mascotas

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

      Luis Gabriel Sánchez Quintana

      Luis Gabriel Sánchez Quintana

      student•
      hace 4 años
        David Leonardo Garzón piña

        David Leonardo Garzón piña

        student•
        hace 4 años
        Luis Gabriel Sánchez Quintana

        Luis Gabriel Sánchez Quintana

        student•
        hace 4 años
      Michael Merchan

      Michael Merchan

      student•
      hace 4 años
        Pablo Andres Fernandez Cari

        Pablo Andres Fernandez Cari

        student•
        hace 3 años
        José Fabián Beltrán Meza

        José Fabián Beltrán Meza

        student•
        hace 3 años
      Natali Rivero

      Natali Rivero

      student•
      hace 4 años
        Rodrigo Massieu

        Rodrigo Massieu

        student•
        hace 4 años
        Wilkins Bernardo Brito Serrano

        Wilkins Bernardo Brito Serrano

        student•
        hace 4 años
      Abel da Cunha

      Abel da Cunha

      student•
      hace 4 años
        Maria Soledad Lanfranconi

        Maria Soledad Lanfranconi

        student•
        hace 3 años
        Nestor Rios Garcia

        Nestor Rios Garcia

        student•
        hace 3 años
      M L

      M L

      student•
      hace 4 años
      Cristian Oswaldo Sacta Martos

      Cristian Oswaldo Sacta Martos

      student•
      hace 3 años
        Jimy Parra

        Jimy Parra

        student•
        hace 2 años
      Anderson alejandro Sanchez martinez

      Anderson alejandro Sanchez martinez

      student•
      hace 3 años
      Jose Ever Muñoz Muñoz

      Jose Ever Muñoz Muñoz

      student•
      hace 4 años
      Olga Lucia Moreno Rojas

      Olga Lucia Moreno Rojas

      student•
      hace 2 años
      Andrés Schuster

      Andrés Schuster

      student•
      hace 3 años
      Josué Rubén Robles Gonzalez

      Josué Rubén Robles Gonzalez

      student•
      hace 10 meses
      Fabian Andres Villon Garcia

      Fabian Andres Villon Garcia

      student•
      hace 3 años
        Juan Carlos Montilla Sánchez

        Juan Carlos Montilla Sánchez

        student•
        hace 3 años
        Ernesto Alejandro Toledo Romero

        Ernesto Alejandro Toledo Romero

        student•
        hace 3 años
      Manuel Andres García Vera

      Manuel Andres García Vera

      student•
      hace 3 años
      Carlos Florez

      Carlos Florez

      student•
      hace 3 años
      Yonerloy Inza Lorenzo

      Yonerloy Inza Lorenzo

      student•
      hace 3 años
      Stiven Andres Medina Lopez

      Stiven Andres Medina Lopez

      student•
      hace 3 años
      Ivan Rojas

      Ivan Rojas

      student•
      hace 3 años
      Diego Medardo Saavedra García

      Diego Medardo Saavedra García

      student•
      hace 3 años
      Andree Sebastian Carlos Arias

      Andree Sebastian Carlos Arias

      student•
      hace 3 años
      Nestor Rios Garcia

      Nestor Rios Garcia

      student•
      hace 3 años

      Me encantan estos playgrounds, espero los incorporen en todos los cursos :)

      export function createPetList() { const petList = []; return function addPet(myPet) { if (myPet) { petList.push(myPet); } return petList; } }

      pregunta, porque es necesario el return en la funcion anidada, es que eso no me queda muy claro??

      Para que el closure sirva y la funcion se autoejecute, recuerda que tenemos que mandarla a llamar dos veces, en este caso la estoy mandando a llamar inmediatamente, pero bien podría llamarla con el return después de declarar la función así:

      exportfunction createPetList() { const petList = []; //Se declara la funcion function addPet(myPet) { if (myPet) { petList.push(myPet); } return petList; } //Se manda a llamar return addPet(); }

      Les comparto mi solución.

      export function createPetList() { const pets = [] return (info) => info ? pets.push(info): pets }

      que bonito código! Espero poder programar como tú en el futuro

      Gracias por compartir tu solución la cual es bastante limpia.

      Si quieren probar en VSCode con el Code Runner, sin el console.log no devuelve nada, también hay que quitar el "export". A mí este me salió bien a la primera, el playground anterior fue frustrante, ya voy entendiendo xD

      function createPetList() { // Tu código aquí 👈 const petList = []; return function (newPet) { if (newPet) { petList.push(newPet); } return petList; }; } const myPetList = createPetList(); console.log(myPetList("michi")); console.log(myPetList("firulais")); console.log(myPetList());

      Gracias! No lograba identificar como hacer para que corra sin errores

      me podrías explicar por qué pones en tu código return function (newPet) { } No se supone que el retornar una funcion debe hacerse al haberlo terminado de escribir

      No pongan los resultados en los comentarios, si no no tiene sentido que pongan playgrounds... es lo mismo que hacer un spoiler :(

      es que se deberían poder ocultar los comentarios por que por ej yo estoy acostumbrada a leer primero los comentarios y ni me doy cuenta que no tengo que mirar cuando aparece un playground 😆 pero en fin debería haber una opción, de por si, para ocultar los comentarios y en los playgrounds que esten ocultos por default, en el resto no

      Tiene sentido tu razonamiento y la solución de María me parece muy buena, pero no sé que tan difícil es no voltear a ver los comentarios.

      Wow este sistema de Playground es incredible!

      Tuve que ver la clase como 4 veces pero creo que lo tengo: s closures son una característica importante de JavaScript, y entender cómo funcionan es esencial para escribir código limpio y eficiente. Un closure es una función que se define dentro de otra función, y que tiene acceso a las variables y parámetros de la función externa. Además, el closure mantiene una referencia a los valores de estas variables, incluso después de que la función externa ha terminado de ejecutarse.

      Veamos un ejemplo para entender mejor cómo funcionan los closures. Imagina que queremos escribir una función que multiplique un número por un factor, pero queremos definir el factor en una función externa:

      function multiplicarPor(factor) { return function(numero) { return numero * factor; } } var duplicar = multiplicarPor(2); var triplicar = multiplicarPor(3); console.log(duplicar(5)); // Output: 10 console.log(triplicar(5)); // Output: 15

      En este ejemplo, la función multiplicarPor devuelve otra función que realiza la multiplicación. La función interna mantiene una referencia al valor de factor, que se define en la función externa. Cuando llamamos a multiplicarPor(2), se devuelve una función que multiplica el número por 2. Al llamar a multiplicarPor(3), se devuelve otra función que multiplica el número por 3. En ambos casos, se crea un closure que mantiene una referencia al valor de factor.

      En resumen, los closures son útiles porque permiten crear funciones que mantienen una referencia a los valores de las variables y parámetros de la función externa, incluso después de que la función externa ha terminado de ejecutarse. Esto hace que las funciones sean más flexibles y reutilizables, y puede ayudar a evitar errores comunes en el código.

      Muy buena explicación

      Yo quiero dar un consejo, No se si alguien pasa por lo mismo que yo pase y aun me pasa, que al momento de que se te presenta un desafio piensas que no puedes. Quiero decirte que si puedes, no importa cuantas veces te equivoques, tu puedes, inténtalo todas las veces que sea necesario, tu puedes conseguir la respuesta

      Esto si que es la educación del futuro!

      const createPetList = () => { const pets = []; return (pet) => { if (pet) { pets.push(pet); } return pets; }; }

      Para resolver este desafío, se puede crear una función llamada "createPetList" que al ser llamada inicialmente crea una closure que almacena un array vacío. Cada vez que se llama a esta función con un parámetro, se agrega ese parámetro al array almacenado en la closure. Si se llama a la función sin pasarle ningún parámetro, entonces se retorna el array completo almacenado en la closure. A continuación se presenta un ejemplo de código en JavaScript para ilustrar cómo podría implementarse esta solución:

      export function createPetList() { let petList = []; return function (pet) { if (pet === undefined) { return petList; } petList.push(pet); } }
      function createPetList() { let pets = []; function petList(namePet) { if (!namePet) { return pets; } if (pets.length === 0) { pets = Array(namePet) return; } pets.push(namePet); } return petList; }

      Se tiene la premisa de que admita objetos string y arrays todos los codigo revisados no contemplan esto, es error del playground o del texto?

      Los datos pueden venir de distintas maneras, pueden ser objetos, strings o arrays.

      Hola, Fabian.

      No entiendo muy bien tu pregunta, pero asumiendo de que te refieres a si están en plural o diferentes tipos de datos; efectivamente, es necesario validar los datos recibidos, debido a que puedes mandar un objeto en un array o puedes mandar arrays dentro de un arrays, por eso debes validar el tipo de datos que será recibido y mostrar la lógica que necesita el programa.

      Igualmente, quedo atento a si eso respondió la pregunta que tenías.

      Saludos.

      Yo me quedé igual. Aunque si en una ocasión me dió error y vi que entre las pruebas había mandado un objeto. Aunque también la descripción no era muy detallada. Cabría muchas dudas de cual sería la estructura del objeto mandado, no creo que se pueda hacer una solución tan universal.

      la clase anterior estuvo genial y este playground estuvo acorde a lo explicado en la clase anterior

      export function createPetList() { const petList = []; function savePet(pet) { if (pet) { petList.push(pet) } else { return petList } } return savePet }```

      Mi solución:

      export function createPetList() { const petList = [] return (pet) => { if (pet) petList.push(pet) return petList } }
      export function createPetList() { const pets = []; return petName => petName ? pets.push(petName) : pets; }

      Mi solucion

      export function createPetList() { let _mascotas = []; return function guardarMascota(mascota) { if (mascota) { _mascotas.push(mascota); } return _mascotas; }; }

      Comparto mi solución

      export function createPetList() { let listaPerros = []; function agregarPerros(a) { if (!a) { return listaPerros; } else { listaPerros.push(a); } } return agregarPerros; }
      export function createPetList() { const list = []; return function addPet(myPet) { if (myPet) { list.push(myPet); } return list; } }
      export function createPetList() { let lista = []; function mascotas(mascota) { if (!mascota) { return lista; } lista.push(mascota); } return mascotas; }

      Aquí mi código:


      function createPetList() { const pets = []; function addPet(pet) { if (pet) { pets.push(pet); return pets } return pets } console.log(pets); return addPet; } const myPetList = createPetList(); myPetList("michi"); myPetList("firulais"); myPetList();