Ce message développe une technique précédemment publiée pour exécuter le code JavaScript une fois la page Web terminée. Le code central utilise des fermetures JavaScript:
function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function() { oldonload(); func(); } } } addLoadEvent(nameOfSomeFunctionToRunOnPageLoad); addLoadEvent(function() { /* more code to run on page load */ });
Une fermeture regroupe une fonction avec son environnement lexical environnant (variables accessibles). Ceci est particulièrement puissant en JavaScript. Considérez cet exemple:
function createAdder(x) { return function(y) { return y + x; } } addThree = createAdder(3); addFour = createAdder(4); document.write('10 + 3 is ' + addThree(10) + '<br>'); document.write('10 + 4 is ' + addFour(10));
createAdder(x)
Renvoie une fonction. Surtout, la fonction retournée (une fermeture) "se souvient" de la valeur de x
de son contexte de création. addThree
ajoute 3, addFour
ajoute 4, démontrant la préservation de l'État de la fermeture.
La fonction addLoadEvent
exploite les fermetures pour gérer plusieurs gestionnaires window.onload
. Si window.onload
est déjà défini, la nouvelle fonction est enveloppée, garantissant que les fonctions existantes et nouvelles s'exécutent séquentiellement lors du chargement de la page. Cela permet de chaîner plusieurs appels à addLoadEvent
, créant une file d'attente de fonctions exécutées sur le chargement de la page.
Les fermetures sont un outil puissant mais nécessitent une compréhension. Une exploration plus approfondie est recommandée (voir l'article Wikipedia lié dans le post original).
Questions fréquemment posées:
Cette section aborde les questions courantes sur les fermetures JavaScript et l'exécution de la charge de page, en fournissant des réponses concises. La section FAQ d'origine est conservée, mais reformatée pour une amélioration de la lisibilité et de la concision. Aucune information n'est perdue. Les questions et réponses sont paraphrasées pour un meilleur flux et pour éviter la redondance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!