Maison  >  Article  >  interface Web  >  Pourquoi « arguments.callee.caller » est-il obsolète en JavaScript ?

Pourquoi « arguments.callee.caller » est-il obsolète en JavaScript ?

DDD
DDDoriginal
2024-11-12 10:17:02559parcourir

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

Pourquoi la propriété Arguments.callee.caller a été obsolète en JavaScript

En JavaScript, arguments.callee.caller a été introduit puis obsolète. Cependant, certains navigateurs le prennent toujours en charge, tandis que d’autres l’ont complètement omis. La question se pose : pourquoi cette fonctionnalité apparemment utile a-t-elle été abandonnée ?

Le besoin de récursion

Dans les versions 早期 de JavaScript, les expressions de fonctions nommées n'étaient pas prises en charge. Cela rendait difficile la création d'expressions de fonctions récursives.

Par exemple, considérons la fonction factorielle :

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

Sans expressions de fonctions nommées, ce code ne fonctionnerait pas. La propriété arguments.callee a fourni une solution :

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

Inconvénients d'Arguments.callee

Cependant, arguments.callee présentait plusieurs inconvénients :

  • Cela empêchait les optimisations telles que l'inline et la récursivité de la queue.
  • Cela a modifié la valeur de ceci lors d'appels récursifs.

La solution d'ECMAScript 3

ECMAScript 3 a introduit des expressions de fonction nommées, éliminant le besoin d'arguments.callee.

Par exemple :

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

Cette approche offre plusieurs avantages par rapport arguments.callee :

  • Il permet d'appeler des fonctions comme n'importe quelle autre.
  • Il ne pollue pas l'espace de noms.
  • Il maintient l'intégrité de celui-ci au sein appels récursifs.
  • Il améliore les performances en éliminant la surcharge liée à l'accès aux arguments objet.

Conclusion

La dépréciation de arguments.callee.caller était essentielle pour améliorer les capacités d'optimisation de JavaScript et garantir un comportement cohérent lors des appels de fonction. Les expressions de fonction nommées offrent une alternative plus fiable et plus efficace pour la récursivité et l'accès au contexte appelant.

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!

Déclaration:
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