: javascript

Closure (fermeture)

Dans le cas typique des fonctions évènementielles, on a pas la maitrise des paramètres qui leurs sont envoyés. En effet, c'est le gestionnaire d'évènement qui donne les paramètres au moment de l'appel. Celui-ci se limite d'ailleurs à ne donner qu'un paramètre, une référence à un objet Event.

function handleClick(event) {
  // traiement de l'évènement
}

addEvent(un_element, 'click', handleClick);

Dans certains cas on souhaite utiliser une fonction qui traite un évènement et lui donner des paramètres différents.

function getClickHandler(x, y) {
  var z = 12;
  return function(event) {
    alert(x + y + z);
  }
}

addEvent(un_element, 'click', getClickHandler(3,4));
addEvent(un_autre_element, 'click', getClickHandler(5,3));

Ici nous sommes en présence d'une closure et d'une fonction anonyme imbriquée. Celle-ci a accès aux variables et paramètres de la fonction imbriquante getClickHandler.

Ainsi il est possible d'attacher une fonction évènementielle paramétrée. La fonction interne sera appelée au moment de l'évènement mais elle aura toujours accès au variables et paramètres de sa fonction imbriquante quand bien même celle-ci a terminé son exécution depuis.

Editer