Quand JavaScript évalue-t-il une fonction? Est-ce sur le chargement de la page ou lorsque la fonction est appelée?JavaScript: Quand JavaScript évalue-t-il une fonction, un chargement ou quand la fonction est appelée?
La raison pour laquelle je demande est parce que j'ai le code suivant:
function scriptLoaded() {
// one of our scripts finished loading, detect which scripts are available:
var jQuery = window.jQuery;
var maps = window.google && google.maps;
if (maps && !requiresGmaps.called) {
requiresGmaps.called = true;
requiresGmaps();
}
if (jQuery && !requiresJQuery.called) {
requiresJQuery.called = true;
requiresJQuery();
}
if (maps && jQuery && !requiresBothJQueryGmaps.called) {
requiresBothJQueryGmaps.called = true;
requiresBothJQueryGmaps();
}
}
// asynch download of script
function addScript(url) {
var script = document.createElement('script');
script.src = url;
// older IE...
script.onreadystatechange=function() {
if (this.readyState == 'complete') scriptLoaded.call(this);
}
script.onload=scriptLoaded;
document.getElementsByTagName('head')[0].appendChild(script);
}
addScript('http://google.com/gmaps.js');
addScript('http://jquery.com/jquery.js');
// define some function dependecies
function requiresJQuery() { // create JQuery objects }
function requiresGmaps() { // create Google Maps object, etc }
function requiresBothJQueryGmaps() { ... }
Ce que je veux faire est de réaliser asynchrone téléchargement de mon JavaScript et commencer le plus tôt possible de commencer l'exécution de ces scripts mais mon code a des dépendances quand les scripts ont été téléchargés et chargés. Lorsque j'essaie le code ci-dessus, il semble que mon navigateur essaie toujours d'évaluer le code dans mes fonctions require*
avant même que ces fonctions aient été appelées. Est-ce correct? Ou suis-je mal comprendre ce qui ne va pas avec mon code?
Cette question est pertinente seulement si vous avez décidé de mettre votre JavaScript dans un fichier externe à partir de votre balisage. Si vous manquez de sagesse, alors vous devriez vous attendre à l'incertitude et au chaos. –