Heim >Web-Frontend >js-Tutorial >Warum wurde „arguments.callee.caller' in JavaScript veraltet?

Warum wurde „arguments.callee.caller' in JavaScript veraltet?

DDD
DDDOriginal
2024-11-12 10:17:02568Durchsuche

Why Was `arguments.callee.caller` Deprecated in JavaScript?

Warum die Eigenschaft Arguments.callee.caller in JavaScript veraltet war

In JavaScript wurde arguments.callee.caller eingeführt und später veraltet. Einige Browser unterstützen es jedoch immer noch, während andere es vollständig weggelassen haben. Es stellt sich die Frage: Warum wurde diese scheinbar nützliche Funktionalität aufgegeben?

Die Notwendigkeit einer Rekursion

In den neuesten Versionen von JavaScript wurden benannte Funktionsausdrücke nicht unterstützt. Dies machte es schwierig, rekursive Funktionsausdrücke zu erstellen.

Betrachten Sie beispielsweise die Fakultätsfunktion:

[1,2,3,4,5].map(factorial);

Ohne benannte Funktionsausdrücke würde dieser Code nicht funktionieren. Die Eigenschaft arguments.callee bot eine Lösung:

[1,2,3,4,5].map(function(n) {
     return (!(n>1))? 1 : arguments.callee(n-1)*n;
 });

Nachteile von Arguments.callee

Argumente.callee hatte jedoch mehrere Nachteile:

  • Es verhinderte Optimierungen wie Inlining und Tail-Rekursion.
  • Es änderte den Wert davon bei rekursiven Aufrufen.

Die Lösung von ECMAScript 3

ECMAScript 3 führte benannte Funktionsausdrücke ein, wodurch arguments.callee nicht mehr erforderlich war.

Zum Beispiel:

[1,2,3,4,5].map(function factorial(n) {
     return (!(n>1))? 1 : factorial(n-1)*n;
 });

Dieser Ansatz bietet mehrere Vorteile gegenüber arguments.callee:

  • Es ermöglicht den Aufruf von Funktionen wie alle anderen.
  • Der Namespace wird dadurch nicht verschmutzt.
  • Die Integrität bleibt bei rekursiven Aufrufen erhalten.
  • Es verbessert die Leistung, indem der Mehraufwand für den Zugriff auf das Arguments-Objekt entfällt.

Fazit

Die Abschaffung von arguments.callee.caller war für die Verbesserung von JavaScript von wesentlicher Bedeutung Optimierungsmöglichkeiten und Sicherstellung eines konsistenten Verhaltens bei Funktionsaufrufen. Benannte Funktionsausdrücke bieten eine zuverlässigere und effizientere Alternative für die Rekursion und den Zugriff auf den aufrufenden Kontext.

Das obige ist der detaillierte Inhalt vonWarum wurde „arguments.callee.caller' in JavaScript veraltet?. 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