calleeプロパティ

広告

Argumentsクラスのcalleeプロパティは呼び出された関数そのものへの参照を取得できます。

関数への参照を返します。

calleeプロパティを参照することで呼び出された関数内でその関数への参照を取得できます。つまりcalleeプロパティにはFunctionクラスのオブジェクトへの参照が代入されています。

関数リテラル」などのように名前が無い関数の中で再帰呼び出しなどをする場合に使用できます。

再帰呼び出しの例としてよく使われる階乗の計算は次のように記述することができます。

var func = function(n){
  if (n == 0){
    return 1;
  }else{
    return n * arguments.callee(n - 1);
  }
};

alert(func(3));

arguments.calleeプロパティには呼び出された関数そのものへの参照が含まれています。この関数が呼び出されると、引数の値を1つ減らし引数の値が0になるまで再帰呼び出しを行っています。無名関数では関数名を使って関数を呼び出せないためarguments.calleeプロパティの値を使っています。

サンプルコード

では簡単なサンプルで試してみます。

<!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" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script2_1.js">
</script>

</body>
</html>
function print(str){
  document.write(str + "<br />");
}

document.write("<p>");

var func = function(n){
  if (n == 0){
    return 1;
  }else{
    return n * arguments.callee(n - 1);
  }
};
print(func(2));
print(func(3));
print(func(4));
print(func(5));

document.write("</p>");

上記を実際にブラウザ見てみると次のように表示されます。

p2-1

( Written by Tatsuo Ikura )