微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript中callee与caller的区别分析

callee

callee是对象的一个属性,该属性一个指针,指向参数arguments对象的函数 首先我们来写个阶成函数

rush:js;"> function chen(x){ if (x<=1) { return 1; } else{ return x*chen(x-1); }; };

从这个函数中可以看出来,用到了递归函数,要是改变了函数名,里面的函数名也要随着改变,这样很不方便所以我们用callee来试试

rush:js;"> function chen(x){ if (x<=1) {return 1; }else{ return x*arguments.callee(x-1); }; };

我们来分析一下为什么这样写:根据callee的定义,可以看出来callee是arguments对象的一个属性,指向arguments对象的函数,这个函数就是chen(chen=arguments.callee),这样解释应该可以理解了吧。

caller

caller是函数对象的一个属性,该属性保存着调用当前函数函数的引用(指向当前函数的直接父函数

先来个例子吧

rush:js;"> function a(){ b(); }; function b(){ alert(b.caller); }; a(); //结果就是弹出函数a和内容

我们来解释一下吧,首先函数b的属性caller调用当前函数b的函数引用a(就是指向当前函数b的父函数a),所以结果就是弹出 function a(){ b();};

那么了解了caller和callee,那么可以不可以将二者结合在一起来使用呢

rush:js;"> function b(){ alert(b.caller); };

从这个代码可以看出b函数调用了b函数名,这样当函数名改变时就很不方便,我们需要替换里面的那个b 前面我们知道用什么方法可以指向当前对象,下面我们就来修改一下:

rush:js;"> (function a(){ b(); })();

function b(){
alert(arguments.callee.caller);
};

代码中可以看出我们用arguments.callee代替了b函数,所以解决了一下麻烦。。。。。

以上所述就是本文的全部内容了,希望大家能够喜欢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐