Bonjour, Bonsoir,

Tjrs sur ma lancée d’étudier JavaScript, je suis entrain de lire un bouquin de Dan Mantyla - Functional Programming
in JavaScript



Dans ce livre, l'auteur colle un bout de code que je ne comprend absolument pas!!

La fonction qui retourne une fonction qui retourne une fonction.. j'avoue que ca me dépasse complétement..
De plus, la fonction est stockée dans une variable, qui du coup peut passer un argument "par après".. comment dire.. est ce que j'ai déjà dit que ça me dépassait complétement ??!!

Je comprend que func(a, b) fait appel a [c]math.pow(a, b)[/]
Je peux aussi suivre le cheminement des arguments/paramètres..
Mais pourquoi et comment se fait-il que powersOfTwo fasse appel a return function (b) qui du coup renvoie return func(a, b)??

Est ce que qlq'un aurait la gentillesse de m'aider a comprendre ce qu'il se passe ici?? Ou me guider sur un (très bon) article ??
Je pensais avoir compris ce que c’était que les closure.. apparemment pas :/

Function factories
Remember our section on closures in Chapter 2, Fundamentals of Functional
Programming? Closures are the constructs that makes it possible to create a useful
JavaScript programming pattern known as function factories. They allow us to
manually bind arguments to functions.
First, we'll need a function that binds an argument to another function:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
function bindFirstArg(func, a) {
  return function (b) {
    return func(a, b);
  };
}
 
// Then we can use this to create more generic functions:
var powersOfTwo = bindFirstArg(Math.pow, 2);
console.log(powersOfTwo(3)); // 8
console.log(powersOfTwo(5)); // 32
 
// And it can work on the other argument too:
function bindSecondArg(func, b) {
  return function (a) {
    return func(a, b);
  };
}
 
var squareOf = bindSecondArg(Math.pow, 2);
var cubeOf = bindSecondArg(Math.pow, 3);
 
console.log(squareOf(3)); // 9
console.log(squareOf(4)); // 16
console.log(cubeOf(3)); // 27
console.log(cubeOf(4)); // 64
ps : désoler si le titre du sujet n'est pas très parlant.. je ne savais vraiment pas quoi mettre :/
je le changerais si besoin est..