argumentsオブジェクトは関数内で利用できるオブジェクトです(アロー関数を除く)。argumentsオブジェクトが持つcalleeプロパティは、そのargumentsオブジェクトを呼び出した関数自身を参照するプロパティです。
※なおECMAScript第5版(ES5)のStrictモードでは、calleeプロパティ自体はすでに利用できない仕様となっています(エラーとなる)。
関連ページ
argumentsオブジェクトについて[arguments.length]
例
1 2 3 4 5 6 7 8 |
var factorial = function(n){ if( n>0){ return n*arguments.callee(n-1); } return 1; }; console.log(factorial(4)); //24 |
calleeは無名関数時に利用するプロパティで、再帰関数を作成する場合に利用されます。
実際にnの階乗を求める再帰的な上記コード見ると分かるように、3行目のcalleeプロパティはfactorialオブジェクトに代入されている匿名関数を参照します。結局は下記コードと同じことを実行しています。
1 2 3 4 5 6 7 8 |
var factorial = function(n){ if( n>0){ return n*factorial(n-1); //calleeを置き換えた } return 1; }; console.log(factorial(4)); //24 |