JavaScript コードブロック コードをコピー コードは次のとおりです: <br>function fastial(num) { <br>if (num return 1; <br>} else { <br>return num * 引数。 callee(num - 1); <br>} <br>} <br>var trueFactorial = 階乗; <br>factorial = function () { <br>return 0; <br>alert(5) )); //120 <br>alert(factorial(5)); //0 <br><br> <br>C# コード ブロック</div> <br><br><div class="codetitle"> <span>コードをコピーします<a style="CURSOR: pointer" data="19507" class="copybut" id="copybut19507" onclick="doCopy('code19507')"><u></u> コードは次のとおりです:</a></span> </div>protected void Page_Load(object sender, EventArgs e) <div class="codebody" id="code19507">{ <br>TestFactory( ); <br>} <br>public delegate intactorialDelegate(int num); //再帰関数 delegate を定義します<br>private void TestFactorial() <br>{ <br>factorialDelegate fdelegate = function; // 比較に注意してください。 JavaScript 関数を使用します<br>factorialDelegate trueFactorial = fdelegate; <br>int num1 = trueFactorial(5) //120 <br>int num2 = fdelegate(5); <br>private int returnZero( int num) <br>{ <br>return 0; <br>} <br>private int Factorial(int num) <br>{ <br>if (num { <br>return 1; <br>} <br>else <br>{ <br>return num *階乗(num - 1); <br><br> <br>上記から、次のことがわかります: <br>1. JavaScript の関数は、関数が戻り値を持つかどうかを設定する必要はありません。この場合、関数の戻り値の型を設定する必要はありません。 。 <br>2. JavaScript の関数は実際にはオブジェクトです。これは、私たちが経験している厳密に型指定された言語 (C、C、C#) とは大きく異なります。 <br>3. JavaScript には配列のようなオブジェクト引数があり、これには関数に渡されるすべてのパラメーターが含まれます。また、このオブジェクトには callee と呼ばれる属性もあり、これは引数オブジェクトを所有する関数へのポインタです。 C# コード ブロックを見ると、trueFactory デリゲートの実行と関数階乗が密接に結合されています。この密結合を排除する方法はありません。上記の JavaScript コード ブロックでは、変数 trueFacttorial が階乗の値を取得するとき。次に、0 を返す関数を階乗変数に代入するだけです。 argument.callee が通常どおり使用されない場合、trueFacttorial() を呼び出すと 0 が返されます。関数本体のコードを関数名から分離した後でも、trueFactory() は階乗を通常どおり計算できます。因みに、factorial() に関しては、今のところ 0 を返すだけの関数です。 <br> </div>参考書籍「<br>Javascript Advanced Programming<br>」 <br>本文の一部は上記の書籍から引用しています