CursosEmpresasBlogLiveConfPrecios

Playground: Closure para Almacenar Datos de Mascotas

Clase 10 de 13 • Curso de Closures y Scope en JavaScript

Clase anteriorSiguiente clase

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

  • 9
    Practicando Closures

    Practicando Closures

    15:24 min
  • 10

    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 el examen del curso
    • Luis Gabriel Sánchez Quintana

      Luis Gabriel Sánchez Quintana

      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; } }
        David Leonardo Garzón piña

        David Leonardo Garzón piña

        student•
        hace 3 años

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

        Luis Gabriel Sánchez Quintana

        Luis Gabriel Sánchez Quintana

        student•
        hace 3 años

        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(); }
      Michael Merchan

      Michael Merchan

      student•
      hace 3 años

      Les comparto mi solución.

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

        Pablo Andres Fernandez Cari

        student•
        hace 3 años

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

        José Fabián Beltrán Meza

        José Fabián Beltrán Meza

        student•
        hace 3 años

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

      Natali Rivero

      Natali Rivero

      student•
      hace 3 años

      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());
        Rodrigo Massieu

        Rodrigo Massieu

        student•
        hace 3 años

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

        Wilkins Bernardo Brito Serrano

        Wilkins Bernardo Brito Serrano

        student•
        hace 3 años

        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

      Abel da Cunha

      Abel da Cunha

      student•
      hace 3 años

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

        Maria Soledad Lanfranconi

        Maria Soledad Lanfranconi

        student•
        hace 3 años

        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

        Nestor Rios Garcia

        Nestor Rios Garcia

        student•
        hace 3 años

        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.

      M L

      M L

      student•
      hace 3 años

      Wow este sistema de Playground es incredible!

      Cristian Oswaldo Sacta Martos

      Cristian Oswaldo Sacta Martos

      student•
      hace 3 años

      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.

        Jimy Parra

        Jimy Parra

        student•
        hace un año

        Muy buena explicación

      Anderson alejandro Sanchez martinez

      Anderson alejandro Sanchez martinez

      student•
      hace 3 años

      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

      Jose Ever Muñoz Muñoz

      Jose Ever Muñoz Muñoz

      student•
      hace 3 años

      Esto si que es la educación del futuro!

      Olga Lucia Moreno Rojas

      Olga Lucia Moreno Rojas

      student•
      hace 2 años
      const createPetList = () => { const pets = []; return (pet) => { if (pet) { pets.push(pet); } return pets; }; }
      Andrés Schuster

      Andrés Schuster

      student•
      hace 3 años

      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); } }
      Fabian Andres Villon Garcia

      Fabian Andres Villon Garcia

      student•
      hace 3 años

      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.
        Juan Carlos Montilla Sánchez

        Juan Carlos Montilla Sánchez

        student•
        hace 3 años

        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.

        Ernesto Alejandro Toledo Romero

        Ernesto Alejandro Toledo Romero

        student•
        hace 2 años

        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.

      Manuel Andres García Vera

      Manuel Andres García Vera

      student•
      hace 3 años

      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 }```
      Carlos Florez

      Carlos Florez

      student•
      hace 2 años

      Mi solución:

      export function createPetList() { const petList = [] return (pet) => { if (pet) petList.push(pet) return petList } }
      Yonerloy Inza Lorenzo

      Yonerloy Inza Lorenzo

      student•
      hace 2 años
      export function createPetList() { const pets = []; return petName => petName ? pets.push(petName) : pets; }
      Stiven Andres Medina Lopez

      Stiven Andres Medina Lopez

      student•
      hace 3 años

      Mi solucion

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

      Ivan Rojas

      student•
      hace 3 años

      Comparto mi solución

      export function createPetList() { let listaPerros = []; function agregarPerros(a) { if (!a) { return listaPerros; } else { listaPerros.push(a); } } return agregarPerros; }
      Diego Medardo Saavedra García

      Diego Medardo Saavedra García

      student•
      hace 3 años
      export function createPetList() { const list = []; return function addPet(myPet) { if (myPet) { list.push(myPet); } return list; } }
      Andree Sebastian Carlos Arias

      Andree Sebastian Carlos Arias

      student•
      hace 3 años
      export function createPetList() { let lista = []; function mascotas(mascota) { if (!mascota) { return lista; } lista.push(mascota); } return mascotas; }
      Nestor Rios Garcia

      Nestor Rios Garcia

      student•
      hace 3 años

      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();
      Keren Rodríguez Soto

      Keren Rodríguez Soto

      student•
      hace un mes
      •
      editado

      Mi solución export function createPetList()

      {

        let datosMascotas=[];

        function RegistrarMascotas(mascotas)

        {

          if (mascotas) {

            datosMascotas.push(mascotas);

          }

          return datosMascotas;

        }

        return RegistrarMascotas;

      }

    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