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实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
js函数中onmousedown和onclick的区别和联系探讨
May 19 Javascript
jQuery手动点击实现图片轮播特效
Apr 20 Javascript
教你如何在Node.js中使用jQuery
Aug 28 Javascript
js 只比较时间大小的实例
Oct 26 Javascript
js实现控制文件拖拽并获取拖拽内容功能
Feb 17 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
vue实现树形结构样式和功能的实例代码
Oct 15 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
Feb 09 Javascript
用Angular实现一个扫雷的游戏示例
May 15 Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 19 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 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
长波知识介绍
2021/03/01 无线电
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
parseInt parseFloat js字符串转换数字
2010/08/01 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
如何在MVC应用程序中使用Jquery
2014/11/17 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
python实现折半查找和归并排序算法
2017/04/14 Python
python爬虫爬取网页表格数据
2018/03/07 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
python实现音乐下载的统计
2018/06/20 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
财务人员个人自荐信范文
2013/09/26 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
调研汇报材料范文
2014/08/17 职场文书
药店促销活动策划方案
2014/08/24 职场文书
Golang 字符串的常见操作
2022/04/19 Golang