ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript での匿名再帰実装のコードケースの詳細な説明

Javascript での匿名再帰実装のコードケースの詳細な説明

黄舟
黄舟オリジナル
2017-05-26 10:01:571278ブラウズ

この記事では主に匿名再帰を実装する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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。