En fait, ce n'est pas si compliqué si vous travaillez pas à pas. Travaillons de l'intérieur. Appel:
three()
sans paramètre signifie que vous passez une valeur indéfinie comme func. C'est donc la même chose que de dire:
makeNum(3, undefined)
Lorsque makeNum voit que func n'est pas défini, il renvoie num, qui est 3.
Nous avons donc réduit cela à:
eight(minus(3))
Voyons maintenant comment
minus(3)
évalue. moins voit que le paramètre que vous avez fourni est 3, donc il retourne une fonction qui peut accepter un paramètre "gauche" et soustraire le 3 que nous avons déjà fourni. Il ne s'exécute PAS. Il se trouve juste là, attendant d'être appelé avec un paramètre "gauche" pour pouvoir en soustraire 3.
Nous avons donc réduit cela à:
eight(function(left){
return left - 3;
})
Voyons maintenant comment cela évalue. huit est appelé avec le paramètre func étant cette fonction:
function(left){
return left - 3;
}
Il passe ensuite 8 et cette fonction à makeNum quand il dit:
makeNum(8, func)
makeNum voit alors que func a été fourni (et n'est donc pas indéfini) et renvoie func (num) à la fonction huit, ce qui revient à passer:
8 - 3
retour à la fonction huit. La fonction huit reçoit cette valeur, puis la renvoie. Nous avons donc réduit cela à:
5
qui est enregistré dans la console.