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 相关文章推荐
改善你的jQuery的25个步骤 千倍级效率提升
Feb 11 Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
jQuery对html元素取值与赋值的方法
Nov 20 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 25 Javascript
jquery组件使用中遇到的问题整理及解决
Feb 21 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
Oct 17 Javascript
基于jQuery实现的扇形定时器附源码下载
Oct 20 Javascript
vue单页缓存方案分析及实现
Sep 25 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
vue-cli4项目开启eslint保存时自动格式问题
Jul 13 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
谈谈PHP的输入输出流
2007/02/14 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
PHP编写RESTful接口
2016/02/23 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
javascript模拟枚举的简单实例
2014/03/06 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
基于JavaScript实现类名的添加与移除
2017/04/23 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Django添加feeds功能的示例
2018/08/07 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
大学生自我鉴定范文模板
2014/01/21 职场文书
课程改革实施方案
2014/03/16 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
学习“七一”讲话精神体会
2014/07/08 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
党员自我评价2015
2015/03/03 职场文书
义卖募捐活动总结
2015/05/09 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python