arguments.callee困惑呀.........

wtcsy 2008-12-25 06:26:37
对于这个东西现在完全晕了....
资料上说
callee
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。
callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名
函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性
仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候
用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是
形参长度,由此可以判断调用时形参长度是否和实参长度一致

按我的理解就是
arguments.callee.length 加个length就是说它是 形参的长度

而直接写arguments.callee(XX) 可以对匿名函数的调用....
看的资料上面还提供了一个例子..
var sum = function(n){
if (n <= 0)
return 1;
else
return n +arguments.callee(n - 1)
} //低归....

我想知道直接用arguments.callee 除了当匿名函数的函数用外 还可以在什么情况下出现了?

嘿嘿 上面是我的理解 如果错误了 请各位大虾指教下,,,,,,,,
顺便帮忙解决下我的疑问 PS:各位圣诞快乐...............
...全文
927 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
OsbornHuo 2010-02-22
  • 打赏
  • 举报
回复
楼主看的是哪一本书,我也看看,正在找一本实用的javascript的教程
wtcsy 2008-12-25
  • 打赏
  • 举报
回复
好象明白了
多谢各位........
  • 打赏
  • 举报
回复
一楼说的很明白了,函数就是一个对象。函数运行需要占用一些资源就像操作系统运行程序程序需要占用一些
资源一样。函数占用的资源就是js解释机分配给它的arguments对象和用来存放局部变量的必包对象,可能不太
确切,因为很有可能arguments对象也是放在必包里边的。建议你看看周爱民的书
var sum = function(n){
alert(arguments.length);
alert(sum===arguments.callee);
}
sum(1,2,3);
CutBug 2008-12-25
  • 打赏
  • 举报
回复
上面其实就是用arguments.callee实现匿名函数递归

var s=(function(n){
if(n>0) return n+arguments.callee(n-1);
return 0;
})(10);
alert(s)//55
majianan 2008-12-25
  • 打赏
  • 举报
回复
形参:arguments.callee.length,就是function(arg1...)
括号“()”中参数的个数
实参:arguments.length,就是实际调用函数的时候传递进来的参数个数
wtcsy 2008-12-25
  • 打赏
  • 举报
回复
关于这个arguments.callee应用还是不大明白

我只知道可以当成匿名函数的应该

但是有时候没有函数却还是可以运用到它 我就不知道他到底是什么意思了?
如:

<script type="text/javascript">
var showStruct = function (struct, left) {
var a = [], type, i;
left = left || ''

for (i in struct) {
type = typeof struct[i];
if (/string|number/.test(type)) {
a[a.length] = left + i + " : " + struct[i];
} else if ('object' == type) {
a[a.length] = left + i + " : \n" + arguments.callee(struct[i], left + ' ');
}
}
return a.join("\n");
};

alert(showStruct({"1":{"1-2":{"1-3":{"1-4":"Hi heng heng"}}}}));
</script>
mrwang2000 2008-12-25
  • 打赏
  • 举报
回复
【个人意见,仅供参考】
javascript中函数就是一个对象,所谓函数的“形参”,在javascript中可以理解为“函数动态创建的属性对象,并赋值。”
fosjos 2008-12-25
  • 打赏
  • 举报
回复
只要理解了function就是一个对象,一切都很好解释
var sum = function(n){
alert(arguments.length);
alert(sum.length);//这里的sum其实就是callee
}
sum(1,2,3);

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧