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控制css中的float的代码
Aug 16 Javascript
15款优秀的jQuery导航菜单插件分享
Jul 19 Javascript
jQuery中click事件用法实例
Dec 26 Javascript
js判断浏览器版本以及浏览器内核的方法
Jan 20 Javascript
JavaScript仿微博发布信息案例
Nov 16 Javascript
javaScript+turn.js实现图书翻页效果实例代码
Feb 16 Javascript
Node.js连接mongodb实例代码
Jun 06 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
教你如何用Node实现API的转发(某音乐)
Sep 20 Javascript
element-ui如何防止重复提交的方法步骤
Dec 09 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 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处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
php利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
js取消单选按钮选中示例代码
2013/11/14 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
python查找目录下指定扩展名的文件实例
2015/04/01 Python
Python字符串中查找子串小技巧
2015/04/10 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
python实现反转部分单向链表
2018/09/27 Python
pyqt5 实现在别的窗口弹出进度条
2019/06/18 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
django的autoreload机制实现
2020/06/03 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
区域经理岗位职责
2015/02/02 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
党支部半年考察意见
2015/06/01 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers