I load the same script in my page many times. I have some trouble on decide which is loaded first/after in my website, due to the async/load functions.
So, I’d like to put a global variable that count, when the script is loaded, the order of them.
So myScript.js will start with :
(function () {
var privateNumberScriptLoaded;
if (numberScriptLoaded === undefined) {
numberScriptLoaded = 0;
}
else {
numberScriptLoaded = numberScriptLoaded + 1;
}
privateNumberScriptLoaded = numberScriptLoaded;
console.log(privateNumberScriptLoaded);
})();
but when I load it with :
<script src="http://www.mywebsite.com/widget/myScript.js?type=normal" type="text/javascript"></script>
<script src="http://www.mywebsite.com/widget/myScript.js?type=rotation" type="text/javascript"></script>
I get (for two times) numberScriptLoaded is not defined.
How can I resolve this trouble? In fact I’ll “create” a global variable in my website if it doesnt exist. Than increment it and store in a “private” variable for each script, so I can save the order of the execution for each script.
At present, your script falls prey to The Horror of Implicit Globals. I’d recommend not doing that.
You have three options:
As all global variables end up as properties on
window, you could usewindowexplicitly:Unlike the code without the
window.prefix, that won’t throw aReferenceError, because looking up a property on an object works differently from resolving a freestanding identifier.Live demo | demo page source | source of script it loads
Always put
var numberScriptLoaded;(with no initializer) at global scope in your script, e.g. outside your scoping function:On the first load, this will create the variable; on subsequent loads, it’s a no-op. Then you can do this without a
ReferenceError:Live demo | demo page source | source of script it loads
Use
typeof. If you take thetypeofa variable that doesn’t exist, you don’t get aReferenceError; you get"undefined". Then you can create it via thewindow.prefix (so you’re not falling prey to The Horror).Live demo | demo page source | source of script it loads