La privatización de funciones + variables es bastante importante en el proyecto js actual que estoy desarrollando. La consecuencia de esto es que cada script envuelve su contenido dentro de un IIFE. Lo que me pregunto ahora es, para ir un paso más allá, ¿es realmente posible en js, usando declaraciones de import o similares, para hacer lo siguiente?
// contents of script A (function(){ function secretFunction() { } }()); // contents of script B (function(){ // var AsFunction = // secretFunction of script A; // AsFunction(); }()); Sin exponer secretFunction() al alcance global (que es lo que estaba haciendo hasta ahora para alcanzar lo que quiero) ..?
Mi idea era poder usar las funciones de los diferentes scripts entre sí, sin exponerlos al alcance global, por lo que el "riesgo" de que se modifiquen desde una fuente externa se reduce aún más. Así, no necesitaría adjuntar funciones como secretFunction() al alcance global para que estén disponibles en otros scripts; por lo tanto, podría usar funciones dentro de los ámbitos de IIFE extranjeros dentro de otros ámbitos de IIFE. ¿Es algo así posible en js?
Entonces, en caso de que alguien haya enfrentado este problema y esté en la misma situación que yo: ha desarrollado un marco js completo para un negocio basado en la estructura IIFE , y cambiar todo eso a js: sería interesante hacer la lógica modular. , pero no tienes tiempo para hacerlo.
En este caso, también podría usar un enfoque que exponga su función al alcance global para pasarla del script A al script B, mientras que cualquier modificación aplicada a esa función en el alcance global aún no afectaría la función cuando la use. en el script B. Considere el siguiente ejemplo para ver claramente lo que quiero decir:
CONTENIDO DEL GUIÓN A
(function(){ window.sample = {}; window.sample.test = function(){ console.log("initial"); }; }()); window.sample.test(); // This will log "initial"CONTENIDO DEL GUIÓN B
(function(){ // Make a copy of the function of script A passed via global scope var copy = window.sample.test; copy(); // This will log "initial" // Modify the global function passed to this script window.sample.test = function(){ console.log("modified"); }; window.sample.test(); // This will log "modified" copy(); // This will still log "initial", although the global function, which is // the source of this copy, has been modified. The variable copy remains // unaffected by this, because the variable stores the value to what it is // assigned, as js always passes variables by value and not by reference. }());