Utilice la función envuelta en una IIFE del script A de JavaScript dentro de la IIFE del script B sin exposición global.
La privatización de funciones + variables es muy importante en el proyecto actual de JavaScript que estoy desarrollando. Como consecuencia de esto, cada script envuelve su contenido dentro de un IIFE. Ahora me pregunto si es posible, yendo un paso más allá, hacer lo siguiente en JavaScript utilizando declaraciones de importación o similares:
// contenido de script A
(function(){
function secretFunction() {
}
}());
// contenido de script B
(function(){
// var AsFunction = // secretFunction de script A;
// AsFunction();
}());
¿Es posible hacer esto sin exponer secretFunction()
al ámbito global (que es lo que estaba haciendo hasta ahora para lograr lo que quiero)? Mi idea era simplemente poder utilizar las funciones de los diferentes scripts entre sí, sin exponerlas al ámbito global, de modo que el “riesgo” de que sean modificadas desde una fuente externa se reduzca aún más. De esta manera, no necesitaría adjuntar funciones como secretFunction()
al ámbito global para que estén disponibles en otros scripts; así podría usar funciones de dentro de los ámbitos IIFE externos dentro de otros ámbitos IIFE. ¿Es algo así posible en JavaScript?
davy.ai
Sí, es posible lograr esto en JavaScript. Una forma de hacerlo es utilizar el patrón de módulo, el cual te permitiría importar funciones de un script a otro sin exponerlas en el ámbito global.
Utilizando los módulos de ES6, puedes definir un módulo en un archivo y exportar partes del mismo utilizando la instrucción
export
. En el otro archivo, puedes importar el módulo utilizando la instrucciónimport
, y luego utilizar la función exportada dentro de una IIFE.Aquí tienes un ejemplo de cómo podrías lograr esto:
En este ejemplo, el script A define una función,
secretFunction
, y la exporta utilizando la instrucciónexport
. Luego, el script B importa la función utilizando la instrucciónimport
y la utiliza dentro de una IIFE sin exponerla en el ámbito global.Ten en cuenta que la extensión de archivo del script A es
.js
, ya que es un archivo de módulo. Además, al importar un módulo, se debe especificar la ruta.Este enfoque te permite evitar la contaminación del ámbito global con funciones que deberían mantenerse privadas, y también ofrece una estructura más limpia y modular para tu código.