この記事では主に匿名再帰を実装するJavascriptのサンプルコードを紹介し、arguments.calleeを使用して匿名再帰を実装します。興味のある方は、
再帰は一般的な プログラミング 手法について学ぶことができます。実名再帰については誰もがよく知っていると思いますが、匿名再帰を実装したい場合はどうすればよいでしょうか。たとえば、匿名の 再帰関数 を返したい場合、または匿名の再帰関数を定義してそれを直接呼び出したい場合、どうすればよいでしょうか?この記事ではその実装について説明します。
実名再帰
階乗を見つける最も簡単な例を使用して、実名再帰から始めましょう:
function fact(n) { if (n < 2) { return n; } else { return n * fact(n - 1); } } console.log(fact(5));
再帰は関数自体を呼び出す必要があります。関数に名前がある場合、これは単純すぎます。
再帰を実現するには変数を使用します
関数を変数に代入することもできますが、再帰を実現するために、関数本体は依然としてこの変数名に依存しています:
var f = function(n) { if (n < 2) { return n; } else { return n * f(n - 1); } } console.log(f(5));
このメソッドは以前のものとは実際には異なります 本質的に異なります。
匿名再帰
次に、匿名再帰の実装について説明します。
最初のアイデア
匿名の再帰関数を返す場合、または匿名の再帰関数を定義して直接呼び出したい場合:
(function (n) { if (n < 2) { return n; } else { return n * ?(n - 1); } })(5);
名前がない場合、疑問符に何を入力すればよいかわかりませんコードでは、再帰を形成する方法がありません。このときどうすればよいでしょうか。この時点で、引数オブジェクトを求める時が来ました。
arguments オブジェクト
JavaScript 関数では、arguments オブジェクトは実際に呼び出されたときのパラメータ オブジェクトを表します。私たちの再帰関数では、実際には「仮パラメータ」 n を定義する必要はまったくありません:
function factNoParam() { if (arguments[0] < 2) { return arguments[0]; } else { return arguments[0] * factNoParam(arguments[0] - 1); } } console.log(factNoParam(5));
呼び出し時に実際のパラメータを渡す限り、arguments[0] を使用して渡された実際のパラメータを取得できます。 in パラメータの値。
さらにパラメータがある場合は、arguments[1]、arguments[2]などを通じて取得することもできます。
arguments.callee Attribute
arguments はパラメータを取得するために使用できることは既にご存知かと思いますが、arguments オブジェクトには実際には別の属性、いわゆる callee があります。 argument.callee は関数自体を表します。それはどういう意味ですか?実際、次のように事実を書くことができます:
function fact(n) { if (n < 2) { return n; } else { return n * arguments.callee(n - 1); } } console.log(fact(5));
それでも再帰的です。なぜなら、 argument.callee は実際には事実と等しいからです。
それでは、この属性の助けを借りて、匿名再帰を実装するのは難しくありません。? を argument.callee:
(function (n) { if (n < 2) { return n; } else { return n * arguments.callee(n - 1); } })(5);
以上がJavascript での匿名再帰実装のコードケースの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。