Privatization of functions + variables is pretty important in the current js project I'm developing. Consequence of this is that every script wraps its content inside an IIFE. What I'm wondering now is, to go a step further, is it actually possible in js, using import
statements or similar, to do the following:
// contents of script A
(function(){
function secretFunction() {
}
}());
// contents of script B
(function(){
// var AsFunction = // secretFunction of script A;
// AsFunction();
}());
Without exposing secretFunction()
to the global scope (which is the thing I was doing so far to reach what I want) .. ?
My thought was just to be able to use the functions of the different scripts within each other, without exposing them to the global scope, hence the 'risk' of them being modified from an external source is even further reduced. Like this, I would not need to attach functions as secretFunction()
to the global scope to make them available in other scripts; hence I could use functions from within foreign IIFE scopes within other IIFE scopes. Is something like this possible in js?
So just in case anyone faced this problem and you were in the same situation as me: You've developed an entire js - framework for a business based on IIFE
structure, and changing all of that to js - modular's logic would be interesting to do, but you have no time to do so.
In this case, you could also use an approach which exposes your function to the global scope to pass it from script A to script B, while any modifications applied to that function in the global scope would nevertheless still not affect the function when you use it in script B. Consider the following example to clearly see what I mean:
CONTENT OF SCRIPT A
(function(){
window.sample = {};
window.sample.test = function(){ console.log("initial"); };
}());
window.sample.test();
// This will log "initial"
CONTENT OF SCRIPT 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.
}());