Fermetures ECMAScript
- Page précédente Objet Function
- Page suivante Orienté objet
Le point le plus mal compris d'ECMAScript est qu'il supporte les closures (fermetures).
La closure, c'est une fonction qui inclut une expression lexical qui n'est pas calculée, c'est-à-dire que la fonction peut utiliser des variables définies en dehors de la fonction.]}
Exemple simple de closure
L'utilisation des variables globales en ECMAScript est un exemple simple de closure. Pensez à ce segment de code ci-dessous :
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
Dans ce segment de code, après que le script a été chargé en mémoire, la valeur de la variable sMessage n'a pas été calculée pour la fonction sayHelloWorld(). Cette fonction capture la valeur de sMessage uniquement pour une utilisation future, c'est-à-dire que l'interpréteur sait que lors de l'appel de la fonction sayHelloWorld(), il doit vérifier la valeur de sMessage. sMessage sera assignée lors de l'appel de la fonction sayHelloWorld() (dernière ligne) et affichera le message "hello world".
Exemple complexe de closure
Définir une autre fonction dans une fonction rend les closures plus complexes. Par exemple :
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
Ici, la fonction addNum() inclut la fonction doAdd() (closure). La fonction interne est une closure car elle récupère les valeurs des paramètres iNum1 et iNum2 de la fonction externe et la valeur de la variable globale iBaseNum. La dernière étape de addNum() appelle doAdd(), ajoute les deux paramètres et la variable globale, et retourne leur somme.
L'important à comprendre ici est que la fonction doAdd() ne prend pas de paramètres, elle utilise les valeurs obtenues à partir de l'environnement d'exécution.
On voit que les closures sont une partie très puissante et polyvalente de ECMAScript, qui peut être utilisée pour exécuter des calculs complexes.
Astuce :Comme pour toute fonction avancée, il faut utiliser les closures avec précaution, car elles peuvent devenir très complexes.
- Page précédente Objet Function
- Page suivante Orienté objet