Formation PUB010 : PHP, 2026 Les événements JavaScript

36.2 Passer un paramètre à une fonction de rappel (bind ou fonctions fléchées)


Une fonction de rappel (en anglais callback function) est une fonction qui est passée en paramètre à une autre fonction. C'est cette autre fonction (appelée fonction d'ordre supérieur ou higher-order function)  qui se chargera d'appeler la fonction de rappel.

Par exemple, le code suivant appelle la fonction de rappel afficherPopup() lorsque l'usager clique sur l'élément HTML avec l'identifiant mon-bouton.

JavaScript

let bouton = document.getElementById('mon-bouton');


if (bouton != null) {
    bouton.addEventListener('click', afficherPopup);
}

Remarquez qu'il n'y a pas de parenthèses après le nom de la fonction de rappel puisqu'on ne veut pas l'exécuter immédiatement.

addEventListener() passe toujours un paramètre à la fonction de rappel : l'événement qui a déclenché l'action.

Mais puisqu'il n'y a pas de parenthèses, il n'est pas possible de passer directement d'autres paramètres à la fonction de rappel. Comment alors pouvons-nous spécifier le message à afficher avec notre fonction maison afficherPopup() ?

JavaScript

// fonction de rappel
function afficherPopup(message) {
    ...
}

bind()

La méthode bind() permet de régler ce problème.

Elle attend toujours au moins un paramètre : la valeur que prendra this à l'intérieur de la fonction de rappel. Ce peut être n'importe quel objet utile à la fonction. Si la fonction de rappel n'en a pas besoin, vous pouvez passer la valeur null.

Il est possible de passer à bind() autant de paramètres que désiré. Ces paramètres seront passés directement à la fonction de rappel.

JavaScript

function afficherPopup(message) {
    console.log(message);   // 'Voici la valeur passée en paramètre'
    ...
}

bouton.addEventListener('click', afficherPopup.bind(null, 'Voici la valeur passée en paramètre'));

Si la fonction de rappel a besoin de travailler avec l'événement que addEventListener() injecte automatiquement, il suffit de l'indiquer comme dernier paramètre.

JavaScript

function afficherPopup(message, event) {
    console.log(message);   // 'Voici la valeur passée en paramètre'
    console.log(event.target);   // <input type="button" id="mon-bouton" value="Cliquez ici!">
    ...
}


bouton.addEventListener('click', afficherPopup.bind(null, 'Voici la valeur passée en paramètre'));

Fonctions fléchées

La syntaxe avec fonctions fléchées permet elle aussi de passer des paramètres à une fonction de rappel.

Remarquez qu'ici, afficherPopup() est appelée avec des parenthèses, car c'est la fonction fléchée qui joue le rôle de fonction de rappel — c'est elle qui appellera afficherPopup() au bon moment.

JavaScript

// fonction de rappel
function afficherPopup(message) {
    ...
}

bouton.addEventListener('click', () => afficherPopup('Voici la valeur passée en paramètre'));

Si la fonction de rappel a besoin de l'événement, il suffit de le déclarer dans la fonction fléchée et de passer les paramètres dans l'ordre convenu lors de l'appel.

JavaScript

// fonction de rappel
function afficherPopup(event, message) {
    ...
}

bouton.addEventListener('click', (e) => afficherPopup(e'Voici la valeur passée en paramètre'));

Autre exemple

La méthode bind() peut être utilisée dans d'autres contextes que addEventListener(), en autant qu'une fonction de rappel soit utilisée.

Voici un exemple où elle est utile. 

JavaScript

// fonction qui fait appel à une fonction callback
function faireQuelqueChose(callback) {
    // fait quelque chose
    if (...) {
        callback(); // exécute la fonction de rappel
    }
}
 
// fonction de rappel (ici, pas de paramètre event, car ne sera pas injecté par addEventListener)
function fonctionAvecParametres(unParametre, unAutreParametre) {
    // fait quelque chose
    console.log(unParametre);
    console.log(unAutreParametre);
}
 
// appel avec bind()
let callback = fonctionAvecParametres.bind(null, "A", "B");
faireQuelqueChose(callback);

// ou appel avec fonction fléchée
faireQuelqueChose(() => fonctionAvecParametres("A", "B"));

Pour plus d'information

« Understand JavaScript Callback Functions and Use Them ». JavaScript is sexy. https://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre