Bin ich es, oder funktioniert John Resigs populärer Blogeintrag zur Teilanwendung nicht?

8

John Resig hat einen populären Blog-Eintrag zur teilweisen Bewerbung: Ссылка Er wird an vielen Stellen erwähnt, und hat

Der Code im Blogpost funktioniert jedoch nicht. Hier ist es:

%Vor%

Nun, wenn Sie versuchen, dies in Ihrer Konsole auszuführen, wird es gut funktionieren. Wenn Sie jedoch versuchen, die Verzögerungsfunktion erneut zu verwenden, wird es nicht funktionieren. Versuchen Sie, dies in Ihrer Konsole auszuführen, nachdem Sie das erste Segment ausgeführt haben:

%Vor%

Beachten Sie, dass die zweite Nachricht nicht angezeigt wird - die erste Nachricht. Natürlich, wenn Sie die Verzögerungsfunktion neu erstellen, funktioniert es, aber warum in aller Welt möchten Sie Ihre teilweise angewendete Funktion jedes Mal neu erstellen, wenn Sie es verwenden?

Nun, da dieser Blogbeitrag das zweite Google-Ergebnis für "partielle Anwendungsjavascript" ist und ziemlich populär zu sein scheint, bezweifle ich, dass er komplett kaputt ist. Auf der anderen Seite funktionieren viele Codebeispiele und die beliebte Bibliothek Prototype.js so, wie ich es erwarte - wiederverwendbare Teilanwendung. Seine Curry-Funktion, etwas höher auf der Seite, funktioniert genau so, wie ich es erwarte. Also:

  • Ist John Resigs Code falsch?
  • Wenn das nicht der Fall ist, warum zwingt Ihr Code Sie dazu, Ihre teilweise angewendete Funktion jedes Mal neu zu erstellen, wenn Sie sie verwenden wollen?
Owen Versteeg 08.04.2014, 23:03
quelle

1 Antwort

6
  

Ist John Resigs Code falsch?

Ja. Selbst wenn Sie es bezweifeln, ist es einfach vollständig gebrochen.

Die Teilapplikation mit undefined arbeitet nicht mehr als einmal, weil sie das geteilte args -Array verändert. Und eine partielle Anwendung ohne undefined funktioniert überhaupt nicht.

Es kann immer noch hilfreich sein, Callbacks oder ähnliches zu erzeugen, die nur einmal aufgerufen werden, aber das ist nicht sehr funktional.

Korrigiert:

%Vor%

Beachten Sie, dass im Gegensatz zur Begrenzung der Länge von filledArgs auf die Anzahl der teilweise angegebenen Argumente (einschließlich undefined s) jetzt beliebig viele zusätzliche Argumente akzeptiert werden und diese nur auf ähnliche Weise wie bind .

Oh, und während wir gerade dabei sind, hat John Resig auch den Begriff currying falsch macht er Teilapplikation mit seiner .curry -Methode (Wikipedia war in 2008).

    
Bergi 08.04.2014, 23:10
quelle