js での再帰関数の使用の概要
10以内の階乗を試してみましょう:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>js中递归函数的使用</title> <script type="text/javascript"> function f(num){ if(num<1){ return 1; }else{ return f(num-1)*num; } } </script> </head> <body> <script type="text/javascript"> alert("10!的结果为:"+f(10)); </script> </body> </html>
再帰関数の呼び出しは以上です
jsの再帰関数が自分自身を呼び出すときの保険の方法です。
高度な JS プログラミングより
典型的な階乗再帰関数:
function fact(num){ if (num<=1){ return 1; }else{ return num*fact(num-1); } }
次のコードはエラーを引き起こす可能性があります:
var anotherFact = fat;
fact = null;
alert(antherFact(4)); //エラー
fact は関数ではなくなったため、エラーが発生しました。
この問題は、実行される関数へのポインタであるarguments.calleeで解決できます。
新しい関数は次のとおりです:
function fact(num){ if (num<=1){ return 1; }else{ return num*arguments.callee(num-1); //此处更改了。 } } var anotherFact = fact; fact = null; alert(antherFact(4)); //结果为24.
JS における通常の再帰の改良点
以下に示すように、関数が名前でそれ自体を呼び出すときに再帰関数が形成されます:
function factorial(num) { if(num<=1) { return 1; } else { return num * factorial(num-1); } }
これは古典的な階乗関数です。表面的には問題がないように見えますが、次のコードにより問題が発生する可能性があります。
var anotherFactory = 階乗;
anotherFactorial(4); //出力 24
factorial = null;
(4); //TypeError: オブジェクト [オブジェクト ウィンドウ] のプロパティ 'factorial' は、
関数 chrome でテストします
その理由は、定義した関数名が実際には関数へのポインターであり、この時点で anotherFacttorial が定義されているためです
また、その関数もポイントしているため、anotherFactory (4) を呼び出すと正常に 24 が出力されます。
この時点では、factorial = null; となります。
この場合、実行定義関数への参照はanotherFactorialとなり、anotherFactorial(4)を呼び出すと上記のエラーメッセージが表示されます。
このとき、arguments.callee を使用して関数定義の階乗を置き換えることができます。
関数の定義は次のようになります。
function factorial(num) { if(num<=1) { return 1; } else { return num * arguments.callee(num-1); } }

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。
