Ответ 1
Да, ES2015 предлагает оптимизацию хвостового вызова в строгом режиме. Доктор Аксель Раушмайер прекрасно объясняет это по ссылке ниже, поэтому я не буду повторять его слова здесь.
Примечание. ES 5 не оптимизирует хвостовые вызовы.
Я пытаюсь понять Tail call optimization
в контексте JavaScript и написал ниже рекурсивные и хвосто-рекурсивные методы для factorial()
.
Рекурсивный:
function factorial (n) {
if (n < 2) {
return 1;
} else {
return n * factorial(n-1);
}
}
Tail-рекурсивный:
function factorial (n) {
function fact(n, acc) {
if (n < 2) {
return acc;
} else {
return fact(n-1, n * acc);
}
}
return fact(n, 1)
}
Но я не уверен, что версия функции tail-recursive
будет оптимизирована компилятором JavaScript, как это делается на других языках, таких как Scala и т.д. Может ли кто-нибудь помочь мне на этом?
Да, ES2015 предлагает оптимизацию хвостового вызова в строгом режиме. Доктор Аксель Раушмайер прекрасно объясняет это по ссылке ниже, поэтому я не буду повторять его слова здесь.
Примечание. ES 5 не оптимизирует хвостовые вызовы.
В теории да. Как утверждает другой ответ.
На практике, однако, по состоянию на июль 2017 года только Safari поддерживает его.
Совместимость Javascript ES6 (ES2015): https://kangax.github.io/compat-table/es6/