2017-06-21 6 views
3

Ich weiß bereits, dass arrow functions do not have an arguments variable bound to them. Dies ist in Ordnung, zum größten Teil, weil ich einfach den ...-Operator verwenden und die Liste der Argumente in ein Array erweitern kann.Zugriff auf Aufgerufenen in Pfeil-Funktionen

Aber arguments hat eine spezielle Eigenschaft arguments.callee (eine Referenz auf die aktuell ausgeführte Funktion), die sehr nützlich für Rekursion oder zum Aufheben der Listener ist. Wie kann ich von einer Pfeilfunktion auf diesen Wert zugreifen? Ist es möglich?

+3

Das "arguments.callee" -Feature war eine ziemlich schlechte Idee. Wenn Sie auf die Funktion verweisen müssen, verwenden Sie keine Pfeilfunktion und nehmen Sie stattdessen eine benannte Funktion vor. – Pointy

+0

^Das und https://stackoverflow.com/questions/30935336/official-information-on-arguments-in-es6-arrow-functions – enapupe

+0

https://stackoverflow.com/questions/103598/why-was-the-the- arguments-callee-caller-property-deprecated-in-javascript/235760 # 235760 – epascarello

Antwort

2

Wie kann ich von einer Pfeilfunktion auf diesen Wert zugreifen? Ist es möglich?

Kurze Antwort ist No.

In der Tat ein Pfeil Funktion nicht binden ihre eigene this, arguments, super ..., wurden sie eine kürzere Syntax mit weniger Details liefern gemeint, wenn wir die MDN Reference for Arrow functions überprüfen wir das sehen können:

Ein Pfeilfunktionsausdruck hat eine kürzere Syntax als ein Funktionsausdruck und bindet keine eigenen Argumente, super, oder new.target. Diese Funktionsausdrücke sind am besten für Nicht-Methodenfunktionen geeignet und können nicht als Konstruktoren verwendet werden.

So werden Sie nicht einen Verweis auf die Funktion selbst mit Pfeil Funktionen bekommen können, und wie eine ziemlich schlechte Idee in den Kommentaren arguments.callee „Feature“ war angegeben.

+0

Nur neugierig: Warum war es eine schlechte Idee? TBH: Ich habe es wirklich nicht so oft benutzt, aber erinnere dich daran, dass es einige ActionScript-Probleme gelöst hat. – cwallenpoole

+0

Ja, es löst viele Probleme und es kann in vielen Fällen als sehr nützlich angesehen werden, aber es kann auch in einigen Fällen irreführend sein, zum Beispiel ist das Hauptproblem, dass der rekursive Aufruf einen anderen Wert bekommen wird das in ** dieser Antwort **, die ein Beispiel seines schlechten Gebrauches zeigt] (https://stackoverflow.com/a/235760/3669624). –

Verwandte Themen