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 相关文章推荐
用js实现多域名不同文件的调用方法
Jan 12 Javascript
document.all的一个比较完整的总结及案例
Jan 31 Javascript
Javascript核心读书有感之词法结构
Feb 01 Javascript
Javascript节点关系实例分析
May 15 Javascript
JavaScript编程中的Promise使用大全
Jul 28 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
Mar 11 Javascript
Bootstrap3 多选和单选框(checkbox)
Dec 29 Javascript
解决微信二次分享不显示摘要和图片的问题
Aug 18 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
Jan 18 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
Apr 26 Javascript
React全家桶环境搭建过程详解
May 18 Javascript
layui-table获得当前行的上/下一行数据的例子
Sep 24 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
自己前几天写的无限分类类
2007/02/14 PHP
php生成xml简单实例代码
2009/12/16 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
JavaScript编程中window的location与history对象详解
2015/10/26 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
详解supervisor使用教程
2017/11/21 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
python复合条件下的字典排序
2020/12/18 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
SQL Server面试题
2016/10/17 面试题
毕业生实习鉴定
2013/12/11 职场文书
留学生如何写好自荐信
2013/12/27 职场文书
书香校园建设方案
2014/05/02 职场文书
节约用水演讲稿
2014/05/21 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
Hive HQL支持2种查询语句风格
2022/06/25 数据库