Home > JavaScript > JavaScript argumentsオブジェクトとcalleeプロパティのお勉強

JavaScript argumentsオブジェクトとcalleeプロパティのお勉強

第2回 JavaScriptの関数をマスターしよう

↑このあたりとかオライリーサイ本124Pあたりを見ながら。


function factorial(x) {
    if (x <= 1)
        return 1;
    return x * factorial(x-1);
}

for (i=1; i<10; i++)
console.log(factorial(i));

で、こういう値が返ってくる。

1 2 6 24 120 720 5040 40320 362880

再帰関数か。かっこいいなー。
使いたいw


var factorial = function(n) {

if (n == 0) {
return 1;
} else {
return n * arguments.callee(n - 1);
}
}
for (i=1; i<10; i++)
console.log(factorial(i));

しかし、関数が匿名関数の場合はどうだろう。再帰処理に際して呼び出すべき名前がないので、この場合は、calleeプロパティを利用する必要があるというわけだ。

なるほど。無名関数の場合はargumentsオブジェクトの
calleeプロパティを使って参照すればいいのかー。

うん、珍しくきれいに納得できたーと思ったら

[参考]argumentsオブジェクトの実体

 厳密には、JavaScriptは関数呼び出しのタイミングで、ローカル変数や引数情報を、Activation Object(通称、「Callオブジェクト」とも呼ばれる)のプロパティとして格納している。argumentsオブジェクトも、その実体はCallオブジェクトのargumentsプロパティであある。

 Callオブジェクトは、アプリケーション側から明示的に生成したり呼び出したりすることはできないし、通常は意識することすらない存在であるので、本稿ではただ単に「argumentsオブジェクト」と呼ぶものとする。

ん、なんだ?Callオブジェクトのプロパティ?
Activation ObjectがCallオブジェクトって呼ばれるんだ。
Activation Objectか、名前はちらちら見るけれど。。
このへんはまだ理解できてないな><
雰囲気だけ分かる。そしてそれは分かったとは言わないのだけれど。

Comment:0

Comment Form
Remember personal info


Home > > JavaScript argumentsオブジェクトとcalleeプロパティのお勉強

Page Top