理解arguments.callee

callee

返回正被执行的Function对象,也就是所指定的Function对象的正文。

callee属性是arguments对象的一个成员,它表示函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性。

下面看callee的几种用法:

1.arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用的形参长度是否和实参长度一致。

1 function test(x,y,z){
2 checkArg(arguments);
3 return x+y+z;
4 }
5  function checkArg(arg){
6 var arg_test1,arg_test2;
7 arg_test1=arg.length;
8 arg_test2=arg.callee.length;
9 if(arg_test1==arg_test2){
10 alert('yes')
11 }else{
12 alert('no')
13 }
14 }
15 test(1,2,3);//yes
16 test(1,2,3,4);//no

2.with(arguments.callee)调用函数自身

1 function Sing(){
2 with(arguments.callee)
3 alert(author + "" + poem);
4 };
5 Sing.author = "李白";
6 Sing.poem = "汉家秦地月,流影照明妃。一上玉关道,天涯去不归";
7 Sing();//李白:汉家秦地月,流影照明妃。一上玉关道,天涯去不归
8  Sing.author = "李战";
9 Sing.poem = "日出汉家天,月落阴山前。女儿琵琶怨,已唱三千年";
10 Sing();//李战:日出汉家天,月落阴山前。女儿琵琶怨,已唱三千年

3.匿名函数实现递归调用

1 function sum(n){
2 if(n<=0){
3 return 0;
4 }else{
5 return n+arguments.callee(n-1);
6 }
7 }
8 alert(sum(3));//6
posted @ 2011-04-06 13:38  郭培  阅读(442)  评论(0编辑  收藏  举报