javascript中callee与caller的区别分析


Posted in Javascript onApril 20, 2015

callee

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

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

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

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是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)

先来个例子吧

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

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

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

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

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

(function a(){
b();
})();

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

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

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

Javascript 相关文章推荐
用javascript来实现动画导航效果的代码
Dec 16 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
Jan 17 Javascript
JQuery中的$.getJSON 使用说明
Mar 10 Javascript
JS实现的生成随机数的4个函数分享
Feb 11 Javascript
js中对函数设置默认参数值的3种方法
Oct 23 Javascript
jquery 表单验证之通过 class验证表单不为空
Nov 02 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
初识angular框架后的所思所想
Feb 19 Javascript
AngularJS基础 ng-list 指令详解及示例代码
Aug 02 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
Dec 08 Javascript
self.attachevent is not a function的解决方法
Apr 04 Javascript
手写Node静态资源服务器的实现方法
Mar 20 Javascript
javascript正则表达式中的replace方法详解
Apr 20 #Javascript
javascript正则表达式基础知识入门
Apr 20 #Javascript
javascript实现表单提交后,提交按钮不可用的方法
Apr 18 #Javascript
Javascript实现颜色rgb与16进制转换的方法
Apr 18 #Javascript
JS解析XML文件和XML字符串详解
Apr 17 #Javascript
JS设置cookie、读取cookie、删除cookie
Apr 17 #Javascript
js获取当前日期时间及其它操作汇总
Apr 17 #Javascript
You might like
实用函数4
2007/11/08 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
2012/03/06 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
php集成开发环境详解
2019/09/24 PHP
激活 ActiveX 控件
2006/10/09 Javascript
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
Python3读取文件常用方法实例分析
2015/05/22 Python
详解Python3中yield生成器的用法
2015/08/20 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
numpy实现RNN原理实现
2021/03/02 Python
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
公司活动方案范文
2014/03/06 职场文书
给市场的环保建议书
2014/05/14 职场文书
合作协议书格式
2014/08/19 职场文书
学生会招新宣传语
2015/07/13 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
Python基础之函数嵌套知识总结
2021/05/23 Python
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技