Aujourd'hui, j'ai vu une question de test qui met en œuvre les fonctions de grammaire suivantes:
var a = add (2) (3) (4); // 9
Il s'agit de l'application d'une fonction d'ordre supérieur. Analyse: ADD (2) renvoie une fonction, Add (2) (3) renverra également une fonction, et enfin Add (2) (3) (4) renverra une valeur numérique.
accomplir:
fonction add (num1) {return function (num2) {return function (num3) {return num1 + num2 + num3;}}} add (2) (3) (4); // 9Il n'y a rien de mal à cela, cela peut parfaitement résoudre le problème.
Optimisation: seule la partie sur les fonctions d'ordre supérieur est discutée ici. Pour de meilleures solutions, des appels infinis peuvent être mis en œuvre.
// Méthode 1 Fonction Add (a) {var temp = function (b) {return add (a + b);} temp.valueof = temp.ToString = function () {return a;}; return temp;} add (2) (3) (4) (5); // 14 // méthode 2. Un autre moyen d'élégation (à partir de Gaubee): fonction add (num) {num + = ~ ajout; num; return add;} add.valueof = add.toString = function () {return add.num}; var a = add (3) (4) (5) (6); // 18 // Méthode 2 Commentaire: En fait, il est équivalent à, mais un attribut personnalisé est appliqué à la fonction pour stocker la valeur. ; (fonction () {var sum = 0; fonction add (num) {sum + = num; return add;} add.valueof = add.toString = function () {return sum;} window.add = add;}) () var a = add (3) (4) (5) (6); // 18 [/ code]C'est ce que j'ai écrit dans l'article que j'ai vu dans [url = http: //www.cnblogs.com/wengxuesong/p/5577683.html] Blog Garden [/ url]. Je n'ai jamais compris la méthode un et la méthode deux, et j'ai également essayé de sortir la fonction [Code = javascript, JavaScript Code, True] Fonction 9 dans la console
var temp = function () {} temp.valueof = function () {return 2;} temp.toString = function () {return 'hahh';} alert (temp); console.log (2 * temp);Lorsqu'il doit être converti en une chaîne, ToString sera appelé et la valeur de la valeur sera appelée lorsqu'elle doit être convertie en nombre.