Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| slam4:richclient:angularjs:prerequis [2014/12/28 12:25] – [Déclarations] jcheron | slam4:richclient:angularjs:prerequis [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 53: | Ligne 53: | ||
| ==== Portée et fonctions ==== | ==== Portée et fonctions ==== | ||
| + | Il est impossible d' | ||
| + | En revanche, une fonction peut accéder aux différentes variables et fonctions qui appartiennent à la portée dans laquelle elle est définie. Une fonction définie dans une autre fonction peut également accéder à toutes les variables de la fonction " | ||
| + | <sxh javascript> | ||
| + | // Les variables suivantes sont globales | ||
| + | var num1 = 20, | ||
| + | num2 = 3, | ||
| + | nom = " | ||
| + | // Cette fonction est définie dans la portée globale | ||
| + | function multiplier() { | ||
| + | return num1 * num2; | ||
| + | } | ||
| + | multiplier(); | ||
| + | // Un exemple de fonction imbriquée | ||
| + | function getScore () { | ||
| + | var num1 = 2, | ||
| + | num2 = 3; | ||
| + | | ||
| + | function ajoute() { | ||
| + | return nom + " a marqué " + (num1 + num2); | ||
| + | } | ||
| + | | ||
| + | return ajoute(); | ||
| + | } | ||
| + | |||
| + | getScore(); // Renvoie "Messi a marqué 5" | ||
| + | </ | ||
| + | |||
| + | ==== Closure ==== | ||
| + | |||
| + | Une closure permet de stocker une variable locale utilisée par une fonction | ||
| + | <sxh javascript; | ||
| + | (function() { | ||
| + | |||
| + | })(); | ||
| + | </ | ||
| + | |||
| + | **Exemple :** | ||
| + | La variable locale nom (Mozilla) est stockée dans la variable maFonction, correspondant à créerFonction() | ||
| + | |||
| + | <sxh javascript> | ||
| + | function créerFonction() { | ||
| + | var nom = " | ||
| + | function afficheNom() { | ||
| + | alert(nom); | ||
| + | } | ||
| + | return afficheNom; | ||
| + | } | ||
| + | |||
| + | var maFonction = créerFonction(); | ||
| + | maFonction(); | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Classe et encapsulation ==== | ||
| + | Il est possible de définir une fonction publique accédant à des fonctions et des variables privées en utilisant des closures. Cette façon de procéder est également connue comme le patron de conception module, et permet de créer des classes : | ||
| + | <sxh javascript; | ||
| + | var creerCompteur = function() { | ||
| + | var compteurPrivate = 0; | ||
| + | function changeValeur(val) { | ||
| + | compteurPrivate += val; | ||
| + | } | ||
| + | return { | ||
| + | increment: function() { | ||
| + | changeValeur(1); | ||
| + | }, | ||
| + | decrement: function() { | ||
| + | changeValeur(-1); | ||
| + | }, | ||
| + | valeur: function() { | ||
| + | return compteurPrivate; | ||
| + | } | ||
| + | }; | ||
| + | }; | ||
| + | </ | ||
| + | **Utilisation de la classe creerCompteur :** | ||
| + | <sxh javascript; | ||
| + | var compteur1 = creerCompteur(); | ||
| + | var compteur2 = creerCompteur(); | ||
| + | alert(compteur1.valeur()); | ||
| + | compteur1.increment(); | ||
| + | compteur1.increment(); | ||
| + | alert(compteur1.valeur()); | ||
| + | compteur1.decrement(); | ||
| + | alert(compteur1.valeur()); | ||
| + | alert(compteur2.valeur()); | ||
| + | </ | ||
| + | |||
| + | ==== Prototype ==== | ||
| + | Mais les closures sont coûteuse (en mémoire et temps d' | ||
| + | Par contre, dans ce cas, la variable compteur est redevenue publique. | ||
| + | |||
| + | <sxh javascript> | ||
| + | function creerCompteur() { | ||
| + | this.compteur= 0; | ||
| + | } | ||
| + | creerCompteur.prototype = { | ||
| + | decrement: function() { | ||
| + | this.compteur--; | ||
| + | }, | ||
| + | increment: function() { | ||
| + | this.compteur++; | ||
| + | }, | ||
| + | valeur: function() { | ||
| + | return this.compteur; | ||
| + | } | ||
| + | }; | ||
| + | </ | ||
| + | |||
| + | Utilisation de la classe et instanciation d'un objet avec l' | ||
| + | <sxh javascript> | ||
| + | var compteur=new creerCompteur(); | ||
| + | compteur.increment(); | ||
| + | alert(compteur.compteur);// | ||
| + | </ | ||
| ===== JSON ===== | ===== JSON ===== | ||
| [[http:// | [[http:// | ||
| Ligne 106: | Ligne 220: | ||
| } | } | ||
| ] | ] | ||
| + | </ | ||
| + | |||
| + | ===== Tableaux ===== | ||
| + | <sxh javascript> | ||
| + | var values=[{" | ||
| + | </ | ||
| + | ==== Parcours classique ==== | ||
| + | |||
| + | <sxh javascript> | ||
| + | for(var i=0; | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== foreach ==== | ||
| + | |||
| + | <sxh javascript> | ||
| + | values.forEach(function(element) { | ||
| + | console.log(element.code); | ||
| + | }); | ||
| </ | </ | ||