Nuestro próximo tema es algo llamado,
Expresiones de funciones invocadas inmediatamente.
Así que echemos un vistazo a lo que son.
Así que a veces en JavaScript,
necesitamos una función que solo se ejecute una vez.
Y luego nunca más.
Así que básicamente una función
que desaparece justo después de que se llama una vez.
Y esto podría no aparecer
tener mucho sentido en este momento.
Pero en realidad necesitamos esta técnica más adelante.
Por ejemplo, con algo llamado async/await.
Entonces, ¿cómo podríamos hacer eso?
Bueno, podríamos simplemente crear una función.
Y luego solo ejecutarlo una vez.
Entonces, ejecute, una vez, la función.
Esto nunca volverá a ejecutarse.
Y entonces podemos llamarlo aquí.
Sin embargo, podemos ejecutar esta función de nuevo.
En algún otro punto del código,
si queremos, ¿no?
No hay nada que nos detenga,
de más tarde hacer correr una vez más, ¿verdad?
Y entonces esto no es lo que queremos hacer.
Queremos ejecutar una función de inmediato.
Y ni siquiera tener que guardarlo en alguna parte.
Y así es como lo hacemos.
Así que simplemente escribimos la expresión de la función en sí.
Así que sin asignarlo a ninguna variable.
Ahora, si tratamos de ejecutar esto,
obtendremos un error por ahora.
Entonces dice que las declaraciones de función requieren un nombre de función.
Y eso es porque
por supuesto, JavaScript aquí espera una declaración de función.
Porque simplemente comenzamos esta línea de código aquí
con la palabra clave función.
Sin embargo, todavía podemos engañar a JavaScript
en pensar que esto es sólo una expresión.
Y lo hacemos simplemente envolviendo todo
de esto entre paréntesis.
Y ahora,
básicamente transformamos la declaración que teníamos antes
en una expresión.
Y ahora si guardamos esto,
no obtenemos ningún error.
Pero también esta función aún no se ejecutó, ¿verdad?
Nunca lo llamamos.
Así que sabemos que esto aquí es la función.
Y así, podemos llamarlo inmediatamente.
Y así con esto,
obtendremos ahora este texto aquí bloqueado
a la consola, a la cadena.
Y de hecho aquí está, ¿de acuerdo?
Así que de nuevo esto aquí,
es realmente solo el valor de la función.
Entonces es solo una expresión de función.
Y luego inmediatamente, lo llamamos aquí.
Y por eso este patrón aquí,
se denomina expresión de función invocada inmediatamente.
O IIFE para abreviar.
Expresión de función inmediatamente invocada.
Y lo mismo sería, por supuesto,
también funcionan para una función de flecha.
Así que copiemos esto.
Esto tampoco volverá a ejecutarse.
Entonces, si tratamos de llamarlo así,
entonces no funcionaria.
Y entonces,
en realidad no obtenemos un error.
Pero tampoco pasa nada.
Así que primero tenemos que envolver esto entre paréntesis.
Y luego como lo llamamos.
Entonces aquí está.
Bien, entonces dos formas de escribir.
una expresión de función invocada inmediatamente.
Pero te estarás preguntando,
¿Por qué se inventó realmente este patrón?
Bueno, ya sabemos que las funciones crean ámbitos, ¿verdad?
Y lo que es importante aquí
es que un alcance no tiene acceso
a variables desde un ámbito interno, ¿verdad?
Por ejemplo, aquí mismo en este ámbito global.
No tenemos acceso a ninguna variable que
se definen en el alcance
de alguna de estas funciones aquí, ¿verdad?
Así por ejemplo,
agreguemos una variable aquí.
Digamos, es privado = 23.
Y luego, cuando tratamos de acceder a él aquí.
Ya sabes que no va a funcionar, ¿verdad?
Y eso es porque la cadena de alcance
solo funciona al revés.
Entonces el alcance interno tendría acceso
a cualquier cosa definida fuera,
aquí en el ámbito global.
Pero al revés,
el ámbito global no tiene acceso a nada,
que está dentro de un alcance.
Entonces, en este caso,
del alcance creado por esta función aquí.
Por lo tanto, decimos que todos los datos definidos
dentro de un alcance es privado.
También decimos que estos datos están encapsulados.
Entonces, por ejemplo, esto es privado aquí.
está encapsulado dentro del alcance de esta función,
que se crea aquí.
Y encapsulación de datos y privacidad de datos.
son conceptos extremadamente importantes en la programación.
Muchas veces necesitamos proteger nuestras variables,
de ser sobrescrito accidentalmente por otras partes
Del programa.
O incluso con scripts o bibliotecas externas.
Y voy a hablar en detalle sobre
estos conceptos en la sección de programación orientada a objetos.
Pero por ahora, tenga en cuenta que es importante
para ocultar variables.
Y que los ámbitos son una buena herramienta para hacer esto.
Y esta es también la razón por la cual
Se inventaron las expresiones de funciones inmediatamente invocadas.
Básicamente, este patrón aquí.
Entonces, esta no es realmente una característica del lenguaje JavaScript.
Es más un patrón que se les ocurrió a algunos desarrolladores.
Y que luego empezó a ser utilizado,
por muchos otros desarrolladores.
Ahora, ¿recuerdas lo que también crea un alcance en ES6?
Y eso es correcto.
Variables declaradas con let o const create
su propio alcance dentro de un bloque.
Y aprendimos que
en la sección detrás de escena, ¿recuerdas?
Así que cuando creamos un bloque, como este,
y declarar es privado allí.
Entonces el exterior todavía no puede acceder es privado.
Así que vamos a comentar este,
y pégalo aquí.
Una vez mas,
no podemos acceder a esta variable.
mientras que por otro lado,
este de aquí,
por supuesto, sería accesible.
Y de nuevo eso es lo que aprendimos,
en uno de los apartados anteriores.
Entonces eso es porque este aquí fue declarado con var,
y por lo tanto ignora por completo
este bloque aquí esencialmente.
Y esta es la razón por la que ahora
en JavaScript moderno.
Las expresiones de función invocadas inmediatamente no son
que usó más.
Porque si todo lo que queremos
es crear un nuevo ámbito para la privacidad de los datos.
Todo lo que tenemos que hacer,
es simplemente crear un bloque como este, ¿verdad?
No hay necesidad de crear una función.
para crear un nuevo ámbito.
A menos que, por supuesto,
queremos usar var para nuestras variables.
Pero ya sabemos,
probablemente no deberíamos hacer eso. ¿Bien?
Ahora por otro lado,
si lo que realmente necesitas,
es ejecutar una función solo una vez, luego el IIFE.
Entonces, el patrón de expresión de función invocada inmediatamente
sigue siendo el camino a seguir.
Incluso ahora con JavaScript moderno.
Y de hecho veremos un gran caso de uso un poco más tarde.
de hacer un IIFE.