Heute habe ich eine Testfrage gesehen, die die folgenden Grammatikfunktionen implementiert:
var a = add (2) (3) (4); // 9
Dies ist die Anwendung einer Funktion höherer Ordnung. Analyse: Add (2) gibt eine Funktion zurück, add (2) (3) auch eine Funktion zurück und schließlich add (2) (3) (4) einen numerischen Wert zurück.
erreichen:
Funktion add (num1) {return function (num2) {return function (num3) {return num1+num2+num3;}}} add (2) (3) (4); // 9Daran ist nichts auszusetzen, es kann das Problem perfekt lösen.
Optimierung: Nur der Teil über Funktionen höherer Ordnung wird hier erörtert. Für bessere Lösungen können unendliche Anrufe implementiert werden.
// Methode 1 Funktion 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 // methode 2. Another Sehr elegantem Weg (aus Gaubee): Funktion (num) {num. ~~ add; add.num = num; return add;} add.Valueof = add.toString = function () {return add.num}; var a = add (3) (4) (5) (6); // 18 // Methode 2 Kommentar: Tatsächlich entspricht es, aber ein benutzerdefiniertes Attribut wird auf die Funktion angewendet, um den Wert zu speichern. ; (function () {var sum = 0; Funktion add (num) {sum+= num; return add;} add.Valueof = add.toString = function () {return sum;} Fenster.add = add;}) () var a = add (3) (4) (5) (6); // 18 [/Code]Dies habe ich in dem Artikel geschrieben, den ich in [url = http: //www.cnblogs.com/wengxuesong/p/5577683.html] Blog Garden [/url] gesehen habe. Ich habe die Methode One und Method Two nie verstanden und auch versucht, die Funktion [Code = JavaScript, JavaScript Code, True] -Funktion 9 in der Konsole auszugeben
var temp = function () {} temp.ValueOf = function () {return 2;} temp.toString = function () {return 'hahh';} alert (temp); console.log (2 * temp);Wenn es in eine Zeichenfolge konvertiert werden muss, wird das ToString aufgerufen und ValueOF wird aufgerufen, wenn es in eine Zahl konvertiert werden muss.