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 相关文章推荐
让textarea自动调整大小的js代码
Apr 12 Javascript
jquery提交form表单时禁止重复提交的方法
Feb 13 Javascript
JS获取select的value和text值的简单实例
Feb 26 Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
浅谈jquery高级方法描述与应用
Oct 04 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
Scala解析Json字符串的实例详解
Oct 11 Javascript
JS原型继承四步曲及原型继承图一览
Nov 28 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 Javascript
vue实现拖拽效果
Dec 23 Javascript
Vue实现点击箭头上下移动效果
Jun 11 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
长波有什么东西
2021/03/01 无线电
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
2009/06/08 PHP
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
浅谈javascript错误处理
2019/08/11 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
领导失职检讨书
2014/02/24 职场文书
交通事故协议书范文
2014/04/16 职场文书
小学庆六一活动总结
2014/08/28 职场文书
检讨书怎么写
2015/01/23 职场文书
老干部座谈会主持词
2015/07/03 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python