[解決済み] 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 はテールコールを最適化しません。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javascriptは関数型プログラミング言語か?
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] URL/アドレスバーからJavascriptの関数を呼び出す
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] リダイレクトされずにHTMLフォームを送信する方法