Heim >Web-Frontend >js-Tutorial >Wie kann eine variadische Curry-Summenfunktion in JavaScript erstellt werden, ohne den Babel-Trick zu verwenden?

Wie kann eine variadische Curry-Summenfunktion in JavaScript erstellt werden, ohne den Babel-Trick zu verwenden?

DDD
DDDOriginal
2024-11-28 07:12:09425Durchsuche

How Can a Variadic Curried Sum Function in JavaScript Be Created Without Using the ' ' Babel Trick?

Variadische Curry-Summe ohne den Plus-Babel-Trick

Kann JavaScript eine Summenfunktion erstellen, die sich wie folgt verhält?

sum(1)(2) = 3
sum(1)(2)(3) = 6
sum(1)(2)(3)(4) = 10

Man glaubt fälschlicherweise, dass dies unmöglich ist. Dies ist jedoch möglich, indem der Operator in Kombination mit sum genutzt wird.

Lösung:

function sum(n) {
  var v = function(x) {
    return sum(n + x);
  };

  v.valueOf = v.toString = function() {
    return n;
  };

  return v;
}

console.log(+sum(1)(2)(3)(4));

Der Schlüssel liegt in der Definition der Methoden valueOf und toString innerhalb der Curry-Funktion. Diese Methoden bestimmen, wie sich die Funktion verhält, wenn sie in einen primitiven Wert, beispielsweise eine Zahl, umgewandelt wird. Durch die Rückgabe von n innerhalb dieser Methoden stellen wir sicher, dass der interne Zustand der Curry-Funktion (die aktuelle Summe) erhalten bleibt.

Diese Technik ermöglicht die Erstellung einer variablen Curry-Summenfunktion, ohne sich auf den Babel-Trick verlassen zu müssen.

Das obige ist der detaillierte Inhalt vonWie kann eine variadische Curry-Summenfunktion in JavaScript erstellt werden, ohne den Babel-Trick zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn