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 style 中visibility和display之间的区别
Jan 22 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
jquery中使用循环下拉菜单示例代码
Sep 24 Javascript
jquery禁止回车触发表单提交
Dec 12 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
Vue如何实现组件的源码解析
Jun 08 Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 Javascript
使用async-validator编写Form组件的方法
Jan 10 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
Jan 26 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
May 14 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
jQuery读取XML文件的方法示例
2017/02/03 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
Python自动连接ssh的方法
2015/03/07 Python
使用Pyrex来扩展和加速Python程序的教程
2015/04/13 Python
python实现多线程抓取知乎用户
2016/12/12 Python
python 计算文件的md5值实例
2017/01/13 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
怎样在程序里获得一个空指针
2015/01/24 面试题
电子商务助理求职自荐信
2014/04/10 职场文书
招股说明书范本
2014/05/06 职场文书
信访工作经验交流材料
2014/05/23 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
如何用python反转图片,视频
2021/04/24 Python
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL