Maison > interface Web > js tutoriel > le corps du texte

Pourquoi la propriété « arguments.callee.caller » est-elle obsolète en JavaScript ?

Mary-Kate Olsen
Libérer: 2024-11-16 21:57:03
original
650 Les gens l'ont consulté

Why was the `arguments.callee.caller` property deprecated in JavaScript?

Dépréciation de la propriété Arguments.callee.caller en JavaScript

La propriété arguments.callee.caller, qui permettait d'accéder à la fonction appelante, était obsolète en JavaScript en raison de plusieurs problèmes.

Motivation pour Dépréciation

  • Expressions de fonction récursives : Les premières versions de JavaScript manquaient d'expressions de fonction nommées, nécessitant la propriété arguments.callee.caller pour les expressions de fonction récursives.
  • Problèmes de performances : L'accès à l'objet arguments était informatique cher.
  • Limites de l'optimisation : La propriété a entravé les optimisations telles que l'inlining et la récursivité de queue.
  • Ces écarts de valeur : L'appel récursif modifierait le cette valeur, entraînant des problèmes potentiels.

Alternatives avec Expressions de fonctions nommées

Avec ECMAScript 3, les expressions de fonctions nommées ont été introduites comme solution :

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

Cette approche offrait plusieurs avantages :

  • Appels de fonction normaux : La fonction peut être appelée comme n'importe quelle autre. autre.
  • Aucune pollution de l'espace de noms : Il n'a pas introduit de variables inutiles.
  • Cette valeur est cohérente : Il a maintenu la valeur correcte de cette valeur.
  • Performances améliorées : Les expressions de fonctions nommées étaient plus efficace.

Dépréciation d'Arguments.callee.caller

En plus des problèmes avec arguments.callee, Function.caller a également eu des implications sur les performances et a effectué des optimisations difficile. Le besoin constant de vérifier la pile d’appels a entravé l’inline et d’autres optimisations. Ainsi, arguments.callee.caller et Function.caller sont devenus obsolètes pour éliminer ces problèmes.

Malgré cette dépréciation, certains navigateurs prennent toujours en charge ces propriétés, mais leur utilisation est déconseillée. Il est recommandé d'utiliser des approches alternatives, telles que des expressions de fonctions nommées, pour accéder et gérer la chaîne d'appels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal