1. ホーム
  2. javascript

[解決済み] JavaScriptの関数はテールコールに最適化されていますか?

2023-04-29 08:14:22

質問

私は Tail call optimization を JavaScript の文脈で理解しようと試み、以下の再帰的メソッドと末尾再帰的メソッドを factorial() .

再帰的です。

function factorial (n) {
  if (n < 2) {
    return 1;
  } else {
    return n * factorial(n-1);
  }
}

Tail-recursiveです。

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 のバージョンが、Scalaなどの他の言語で行われているように、JavaScriptコンパイラによって最適化されるかどうかはわかりません。どなたかこの件に関して助けていただけませんか?

どのように解決するのですか?

更新:2020年1月1日現在、テールコールの最適化をサポートしているブラウザはSafariのみです。

chromium チームは、Tail Call Optimization がアクティブな開発中ではなく、追跡可能であると明言しています。 ここで .

Firefox用の実装は、追跡可能な ここで

オリジナル投稿

はい、ES2015はストリクトモードでテールコールの最適化を提供します。 Axel Rauschmayer博士は、以下のリンクでそれを美しく説明しているので、私はここで彼の言葉を繰り返すことはありません。

注:ES 5 はテールコールを最適化しません。

http://www.2ality.com/2015/06/tail-call-optimization.html