Introducción a JavaScript
¿Por qué aprender JavaScript?
¡Hola Mundo! en Mac
¡Hola Mundo! en Windows
Anatomía de una variable
Tipos de datos en JavaScript
Creación de strings
Operadores aritméticos
Conversión de tipos: Type Casting y Coerción
Conversión de tipos explícita e implícita
Estructuras de Control y Lógica
Operadores de comparación
Operadores lógicos
Ejecución condicional: if
Ejercicio: Adivina el número
Ejecución condicional: switch
Loop: for
Loop: for of
Loop: for in
Loop: while
Loop: do while
Funciones y This
Anatomía de una función
Funciones vs Métodos
Funciones puras e impuras
Arrow function y enlace léxico
Contextos de ejecución y scope chain
¿Qué es Closure?
Preguntas a Desarrolladores Senior: ¿Por qué aprender Desarrollo Web?
Manipulación de Arrays
Introducción a Arrays
Mutabilidad e inmutabilidad de Arrays
Modificación básica del final con push( ), pop( )
Iteración con map( ) y forEach( )
Filtrado y reducción con filter( ) y reduce( )
Búsqueda de elementos con find( ) y findIndex( )
Crear copias con slice( )
Spread operator: casos de uso
Programación Orientada a Objetos
Anatomía de un Objeto
Trabajando con objetos en JavaScript
Función constructora
¿Qué es una clase?
Prototipos y herencias
Herencia en la práctica
Prototipos en la práctica
this en JavaScript
Proyecto: Crea una red social
Proyecto: Crea una red social parte 2
Asincronía en JavaScript
¿Cómo funciona el JavaScript Engine?
Promesas en JavaScript
Usando Async y await en JavaScript
For await of
¿Cómo funciona la web?
¿Cómo funciona HTTP?
Método GET en JavaScript
Método POST en JavaScript
Método DELETE en JavaScript
Importancia del id en el método DELETE
ECMAScript 6 y tus siguientes pasos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Los closures son un concepto fundamental en la programación con JavaScript y otras lenguas similares. Básicamente, un closure es una función que tiene acceso a variables de un ámbito externo, incluso después de que esa función ha dejado de ejecutarse. Este comportamiento se debe al ámbito léxico, el cual se define en el momento en que se crea una función. Este ámbito permite que las funciones accedan a variables dentro de su ámbito y a cualquier variable de los ámbitos superiores.
Para entender la creación de closures, consideremos un ejemplo práctico:
function otherFunction() {
const otherVariable = "I am from other function";
function innerFunction() {
console.log(otherVariable);
}
return innerFunction;
}
const closureExample = otherFunction();
closureExample();
En este ejemplo, innerFunction
es un closure porque tiene acceso a otherVariable
, que está definida en su ámbito externo, otherFunction
. Cuando ejecutamos closureExample()
, el programa imprime "I am from other function", demostrando que innerFunction
puede acceder a otherVariable
a pesar de que otherFunction
ya ha finalizado su ejecución.
A pesar de que los closures son herramientas poderosas, es esencial usarles con cuidado para evitar problemas de memoria. Al crear closures, cada función interna que retorna tendrá su propio ámbito léxico, lo que puede requerir más memoria si no se gestiona correctamente.
Observemos el siguiente ejemplo con un contador:
function createCounter() {
let count = 0;
return function() {
count++;
console.log(count);
};
}
const counterA = createCounter();
counterA(); // 1
counterA(); // 2
const counterB = createCounter();
counterB(); // 1
Aquí, cada llamada a createCounter
crea un nuevo closure con su propio ámbito count
. Los valores de count
son independientes entre counterA
y counterB
, mostrando que cada closure mantiene su propio estado.
Los closures también permiten trabajar con diferentes contextos, ofreciendo flexibilidad en el manejo de funciones:
function order() {
const message = "Hello, ";
function inner(name) {
console.log(message + name);
}
return inner;
}
const closureA = order();
closureA("Alicia"); // Hello, Alicia
closureA("Bob"); // Hello, Bob
En este caso, la función inner
retorna un saludo personalizado, usando el contexto compartido de order
para formar el mensaje completo. Esto demuestra cómo los closures pueden usarse para crear funciones flexibles que acceden y manipulan datos en diferentes contextos.
En resumen, los closures ofrecen una poderosa capacidad para gestionar ámbitos y mantener estados privados en JavaScript, pero se debe ser cuidadoso para no incurrir en problemas de memoria. Con una comprensión adecuada, podemos utilizar esta característica para escribir código eficiente y flexible. ¡Sigue explorando y practicando para perfeccionar tus habilidades con closures y otros conceptos avanzados!
Aportes 24
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?