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
Tipos de scope en JavaScript
  • 2
    Global Scope

    Global Scope

    12:09
  • 3
    Function Scope

    Function Scope

    05:52
  • 4
    Block Scope

    Block Scope

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

    Reasignación y redeclaración

    14:05
  • 6
    Strict Mode

    Strict Mode

    05:54
Closure
  • 7
    ¿Qué es un Closure?

    ¿Qué es un Closure?

    09:37
  • 8

    Playground: Crea un Closure para Sumar

    00:00
  • 9
    Practicando Closures

    Practicando Closures

    15:24
  • 10

    Playground: Closure para Almacenar Datos de Mascotas

    00:00
Hoisting
  • 11
    ¿Qué es el Hoisting?

    ¿Qué es el Hoisting?

    08:28
Debugging
  • 12
    Debugging

    Debugging

    04:33
Cierre
  • 13
    Conclusiones

    Conclusiones

    03:23
    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 2 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 8 días
    •
    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