Closures
Clase 25 de 99 • 30 días de JavaScript
Contenido del curso
Día 1
Día 2
Día 3
Día 4
Día 5 - Checkpoint
Día 6
Día 7
Día 8
Día 9
Día 10 - Checkpoint
Día 11
Día 12
Día 13
Día 14
Día 15 - Checkpoint
Día 16
Día 17
Día 18
Día 19
Día 20 - Checkpoint
Día 21
Día 22
Día 23
Día 24 - Checkpoint
Día 25
Día 26
Día 27
Día 28
Día 29
Día 30
Live Class
Los closures en JavaScript son una característica fundamental del lenguaje que permite a las funciones recordar el estado de su entorno de ejecución, incluso después de que la función haya sido invocada. Esto permite a las funciones mantener un estado privado y protegido de variables y funciones internas, lo que proporciona una mayor flexibilidad y seguridad en el código.
Un closure se crea cuando una función es declarada dentro de otra función. La función interna tiene acceso al ámbito de la función externa, lo que significa que puede acceder a las variables y funciones declaradas dentro de la función externa. Además, un closure también tiene acceso a las variables y funciones globales.
Observa el siguiente ejemplo de la función counter. La función externa crea una variable privada "count" y una función interna "increment" que incrementa el valor de "count" y devuelve el valor actual.
function counter() { let count = 0; return function increment() { count++; return count; } } const myCounter = counter(); console.log(myCounter()); // Output: 1 console.log(myCounter()); // Output: 2 console.log(myCounter()); // Output: 3
En este ejemplo, la función "counter" es el closure y tiene acceso a la variable privada "count" y la función interna "increment". Al asignar la función "contador" a la variable "myCounter" y luego llamar a la función "myCounter", se está utilizando el closure para acceder a la variable "count" y modificar su valor cada vez que se llama a la función "increment". Esto permite mantener un estado interno privado en la función "contador" y evitar conflictos con otras variables con el mismo nombre en el ámbito global.
Además de ayudar a mantener el estado privado, los closures también son útiles para crear funciones genéricas y reutilizables, ya que pueden ser parametrizadas con variables y funciones declaradas en su entorno de ejecución. Por ejemplo, una función que toma una función y un valor como argumentos y devuelve una nueva función que aplica el valor a la función original.
function multiplyBy(multiplier) { return function (value) { return value* multiplier; } } const double= multiplyBy(2); console.log(double(5)); // Output: 10 console.log(double(10)); // Output: 20 const triple = multiplyBy(3); console.log(triple(10)); // Output: 30 console.log(triple(20)); // Output: 60
En este ejemplo, la función "multiplyBy" es un closure que toma un factor como argumento y devuelve una nueva función que multiplica el valor dado por el factor. Al asignar la función "multiplicador" con un factor específico a la variable "doble", se está utilizando el closure para parametrizar la función con un valor específico y crear una nueva función reutilizable que siempre multiplica el valor dado por 2, por 3 o cualquier otro número.
Todo esto y más lo puedes aprender en el Curso de Closures y Scope en JavaScript