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 typeof 用法
Dec 28 Javascript
javascript按位非运算符的使用方法
Nov 14 Javascript
jquery插件corner实现圆角边框的方法
Mar 09 Javascript
jQuery实现提示密码强度的代码
Jul 15 Javascript
JavaScript动态添加css样式和script标签
Jul 19 Javascript
JS实现简单的tab切换选项卡效果
Sep 21 Javascript
webpack入门必知必会
Jan 16 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
May 10 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
简单的三步vuex入门
May 20 Javascript
node.js实现微信开发之获取用户授权
Mar 18 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 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
PHP详细彻底学习Smarty
2008/03/27 PHP
php 动态多文件上传
2009/01/18 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP反向代理类代码
2014/08/15 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
JS实现图片切换效果
2018/11/17 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
layui实现三级联动效果
2019/07/26 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
JS实现密码框效果
2020/09/10 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
英国领先的在线药房:Pharmacy First
2017/09/10 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
银行贷款承诺书
2014/03/29 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python