Sont des fonctions en JavaScript queue-appel de l'optimisation?
J'ai essayé de comprendre, de Tail call optimization
dans le contexte de JavaScript et ont écrit ci-dessous récursive et la queue de récursive méthodes pour factorial()
.
Récursive:
function factorial (n) {
if (n < 2) {
return 1;
} else {
return n * factorial(n-1);
}
}
Récursives terminales:
function factorial (n) {
function fact(n, acc) {
if (n < 2) {
return acc;
} else {
return fact(n-1, n * acc);
}
}
return fact(n, 1)
}
Mais je ne suis pas sûr si le tail-recursive
version de la fonction sera optimisé par le compilateur JavaScript comme cela se fait dans d'autres langages comme Scala, etc. Quelqu'un peut-il m'aider à ce sujet?
- La ligne 2 dans la Queue-récursive extrait doit être
function fact(n, acc)
pour travailler. Merci pour l'extrait, j'essayais de comprendre cela aujourd'hui!
Vous devez vous connecter pour publier un commentaire.
Mise à jour: le 13 Mars 2018 Safari est le seul navigateur qui prend en charge la queue d'appel d'optimisation.
Le chrome équipe stipule explicitement que la Queue d'Appel d'Optimisation n'est pas en cours de développement et peuvent être suivis de ici.
La mise en œuvre de Firefox peuvent être suivis ici
Post Original
Oui, ES2015 offre queue appel d'optimisation en mode strict. Le dr Axel Rauschmayer la pose magnifiquement sur le lien ci-dessous afin que je ne les répèterai pas ses mots ici.
Remarque: ES 5 n'optimise pas la queue d'appels.
http://www.2ality.com/2015/06/tail-call-optimization.html
En théorie oui. Comme l'autre réponse unis.
En pratique, cependant, en juillet 2017, Pas de. Seul Safari prend en charge.
Javascript ES6 (ES2015) compatibilité:
https://kangax.github.io/compat-table/es6/