IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> JavaScript ES6 * Closure et conservation de valeur de paramètre [Résolu]
Options
scoch
posté 19 Apr 2020, 12:51
Message #1


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 663
Inscrit : 1 Jul 2010
Membre no 156 073



Bonjour,

j’essaie, sans succès, d’adapter avec des fonctions fléchées d’ES6 ce code qui permet de conserver une valeur de paramètre en référençant une fonction qui contient une fermeture (closure) :

Exemple qui fonctionne sans fonctions fléchées :
Code
function externe(x) {
   function interne(y) {
      return x + y;
   }
   return interne;
}

let resultat = externe(1)(3);
console.log(resultat); // affiche 4

// référencer la fonction externe avec une valeur en paramètre
// cette valeur est conservée
const fonctionInterne = externe(3);

// appel de la fonction externe avec passage de paramètre
// pour la fonction interne
resultat = fonctionInterne(5);
console.log(resultat); // affiche 8 (3 + 5)
resultat = fonctionInterne(4);
console.log(resultat); // affiche 7 (3 + 4)


Exemple qui ne fonctionne pas avec des fonctions fléchées :
Code
const externe = (x) => {
   const interne = (y) => {
      x + y;
   }
   interne;
}

const fonctionInterne = externe(3);

let resultat = fonctionInterne(5);
console.log(resultat); // TypeError: fonctionInterne is not a function


Edit : j’ai solutionné le problème qui semble venir du fait que, dans ce cas, le retour implicite de valeur ne fonctionne pas. J’ai donc utilisé explicitement return.

La solution :
Code
const externe = (x) => {
   const interne = (y) => {
      return x + y;
   }
   return interne;
}


Si vous avez une idée explication, je suis preneur !
Merci.

Ré édit : titre conforme à la charte smile.gif

Ce message a été modifié par scoch - 19 Apr 2020, 23:52.


--------------------
L'homme n'est que poussière... c'est dire l'importance du plumeau ! Alexandre Vialatte
Go to the top of the page
 
+Quote Post
Jaypee
posté 22 Apr 2020, 12:46
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 435
Inscrit : 29 Aug 2002
Membre no 3 340



On peut ne pas nommer la fonction interne, mais effectivement les deux "return" sont obligatoires, et je n'ai rien lu qui l'explique :
Code
const externe = (x) => { return (y) => { return x + y } }

JP
PS : j'ai lu ceci : Pas de return implicite si les accolades sont utilisées. Donc soit on a { return expression }, soit on a expression seule...
La forme concise ultime est alors :
Code
const externe = (x) => (y) => x + y


Ce message a été modifié par Jaypee - 22 Apr 2020, 13:47.
Go to the top of the page
 
+Quote Post
scoch
posté 22 Apr 2020, 13:23
Message #3


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 663
Inscrit : 1 Jul 2010
Membre no 156 073



Citation (Jaypee @ 22 Apr 2020, 13:46) *
Pas de return implicite si les accolades sont utilisées.

Exact ! Merci.


--------------------
L'homme n'est que poussière... c'est dire l'importance du plumeau ! Alexandre Vialatte
Go to the top of the page
 
+Quote Post
scoch
posté 22 Apr 2020, 19:53
Message #4


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 4 663
Inscrit : 1 Jul 2010
Membre no 156 073



Citation (Jaypee @ 22 Apr 2020, 13:46) *
La forme concise ultime est alors :
Code
const externe = (x) => (y) => x + y

En cas de paramètre unique les parenthèses ne sont pas nécessaires. La forme concise ultime est donc wink.gif
Code
const externe = x => y => x + y


--------------------
L'homme n'est que poussière... c'est dire l'importance du plumeau ! Alexandre Vialatte
Go to the top of the page
 
+Quote Post
Jaypee
posté 22 Apr 2020, 21:49
Message #5


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 2 435
Inscrit : 29 Aug 2002
Membre no 3 340



Magnifique !

JP
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 30th October 2020 - 05:25