Dar una buena acogida.
En este video vamos a hablar sobre cierres.
Los cierres son uno de los conceptos más desafiantes para entender.
Pero una vez que realmente entiendes cuál es la definición y he visto un par de ellos, va
a ser mucho más fácil.
Entonces, ¿qué vamos a hacer en este video?
Vamos a entender qué es un cierre y qué no es.
Vamos a usar cierres para emular variables privadas.
Vamos a enumerar algunos casos de uso para cierres en el mundo real.
Entonces, ¿qué es un cierre?
Un cierre es una función que hace uso de variables definidas en funciones externas que han
regresado previamente.
Entonces sé que esa definición podría no tener demasiado sentido en este momento.
Así que veamos un ejemplo de inmediato.
Voy a presionar la opción de comando Jay y abrir mis herramientas de desarrollo de Chrome.
cierre es una función que utiliza bien las variables definidas en nuestras funciones, entonces hagamos una función externa.
Ahora bien, si decimos que un
Entonces haré una función llamada externa dentro de esta función amik una variable llamada datos que es igual a
la cadena.
Los cierres son un interior de la función externa.
Devolveré una nueva función llamada Inner y dentro de esta función interna o haré una variable llamada datos internos y
los datos internos son iguales a la cadena.
Increíble.
Ahora, dentro de esta función interna, voy a devolver los cierres de cuerdas con la cuerda.
Increíble.
Ahora llamemos a esta función externa.
¿Y qué debería devolvernos?
Bueno, va a devolver la definición de la función interna.
Pero observe aquí que dentro de esta función interna estoy haciendo uso de una variable llamada datos que
se definió en la función externa.
Entonces cuando llamo a esta función externa y llamo a la función interna de inmediato, devuelve la cadena.
Los cierres son increíbles
Por lo tanto, quizás no veas realmente el poder de los cierres en este momento, pero este es solo un
buen ejemplo del uso de variables definidas en funciones externas como esta variable de datos aquí dentro de una función interna.
Cuando la función externa ya ha devuelto el aviso aquí, se devuelve la función
externa pero aún puedo usar esta variable de datos aunque la función externa ya haya regresado.
Echemos un vistazo a otro ejemplo.
Aquí tengo una función llamada Outer que toma un parámetro A y devuelve una
función llamada Inner que toma un parámetro b.
A que se definió en la función externa y en el momento en que se llama que la función externa ha regresado.
La función interna está haciendo uso de la variable
Entonces esta función interna es un cierre al igual que el otro ejemplo que vimos un par de cosas para notar
aquí.
Tenemos que devolver la función interna para que esto funcione y también tenemos la capacidad de llamar
a la función externa y luego llamar inmediatamente a la función interna o almacenar el resultado de la
función interna en una variable y llamarla más tarde, lo que comúnmente hacemos.
Probemos un ejercicio rápido.
Vea si puede averiguar si alguna de estas funciones contiene un video de acertijo de cierre por un segundo.
Está bien, ¿qué se te ocurrió en esta primera función?
Podemos ver que la función interna no está haciendo uso de ninguna variable para encontrar en una función externa
que ha regresado.
Entonces este aquí no contiene un cierre en el segundo ejemplo.
Podemos ver que la función interna está haciendo uso de una variable llamada datos que se definió en una
función externa que ha regresado en el momento en que se llamará a la función interna.
Entonces, el primero no lo es, pero el segundo siempre regresa a la definición de cierre.
no está haciendo uso de variables en una función externa, probablemente no sea un cierre.
Y si ves que la función interna
Entonces, ¿cuándo usarías un cierre?
Bueno, un gran caso de uso para cierres es crear la idea de una variable privada en otros idiomas.
Existe soporte para las variables que no se pueden modificar externamente que llamamos variables
privadas pero en javascript no tenemos eso incorporado.
Afortunadamente, los cierres pueden ayudarnos con eso.
Así que echemos un vistazo a este ejemplo en las herramientas de desarrollo de Chrome en una opción de comando
de prensa Jagan y abrir eso y voy a escribir una función llamada contador y dentro de esta función de contador.
Voy a hacer una variable llamada conteo de modo que sea igual a cero y dentro de esta función de
contador voy a devolver una nueva función.
No me aviso aquí que no estoy dando un nombre a esta función.
Eso es porque estas funciones son anónimas.
Entonces, si quiero nombrar esta función, puedo llamar a esto algo así como contar, pero no es necesario.
Y dentro de esta función interna voy a devolver el recuento plus plus.
Y la razón por la que estoy haciendo más más aquí como operador de prefijo es por lo
que la primera vez que la llamo va hasta 1.
Ahora puedo configurar esta función de contador para que sea igual a una variable llamada C y voy a
guardar R C es igual a contador.
Ahora, ¿qué crees que va a ser C cuando lo eche un vistazo?
Bueno, como vimos antes.
Va a ser una definición de función y si vuelvo a llamar a C voy a devolver el conteo
incrementado en 1.
Vamos a llamarlo una y otra vez.
realmente bueno de esto es que nadie tiene acceso al conteo de variables en el alcance en el que estoy ahora.
Pero lo que es
Si intento acceder al conteo, obtendré una referencia que dice que el recuento no está definido.
Y dado que el recuento es una variable privada, nadie puede entrar y cambiar con el valor del
recuento que comienza siempre va a ser cero.
Detenga el video e intente copiar este ejemplo en la consola de Chrome.
Ayudará mucho a comprender cómo funcionan los cierres.
Echemos un vistazo a otro ejemplo de variables privadas dentro de esta función de clase.
Tengo una variable llamada instructores que es una matriz de dos cadenas llamada LP.
Esta función de aula devuelve un objeto con dos funciones.
Obtener instructores y un instructor obtener instructores me permite mostrar desorientado en el instructor es una función
que toma un parámetro y lo agrega a la matriz del instructor.
Entonces, ¿dónde está el cierre aquí?
Tenga en cuenta que los instructores GET tienen una función de agregar instructor.
Ambos hacen uso de la variable de este instructor que está fuera de esta función aquí y de
esta función aquí.
instructores y agregan que el instructor está usando variables definidas en funciones externas que ya han regresado.
Entonces estas dos funciones obtienen
Pueden ver que aquí obtienen instructores que me permiten imprimir la matriz de Ellen potro y el instructor me
permite agregar un instructor a esa matriz y devolver la teoría.
Pero cuando creo un aula nueva con otra variable y obtengo los instructores, podemos ver que
Ian no está aquí.
Finalmente, mediante el uso de cierre hemos hecho que los instructores sean variables aquí una variable privada.
Nadie puede modificarlo así que cada vez que se crea un aula, los instructores que recibe
siempre se llamarán callejón.
Parece que estás atrapado con nosotros por un tiempo, así que, aunque aquí tenemos un
pequeño ejemplo, muchas herramientas y tecnologías de las que aprenderás hacen bastante uso de los cierres.
Entonces, cuando estés viendo algo de ese código haz tu mejor esfuerzo para ver si puedes ver dónde están
esos cierres.
Bueno, asegúrese de señalarle a usted también.
Entonces, ¿qué aprendemos?
Existe un cierre cuando una función interna hace uso de las variables declaradas en la función externa
que ya ha regresado y el cierre no existe.
Si no devuelve una función interna y si esa función interna no utiliza variables devueltas por
una función externa, también vimos que podemos usar cierres para crear variables privadas y escribir
un código mejor para aislar nuestra lógica y nuestra aplicación.
Y eso es todo por cierres.
Nos vemos en el siguiente video