java caller_JavaScript中callee和caller的区别与用法实例分析
本文实例讲述了JavaScript中callee和caller的区别与用法。分享给大家供大家参考,具体如下:
1.callee
在函数的内部,有两个特殊的对象:arguments和this。其中arguments是一个类似数组的对象,包含着传入函数的所有参数。
虽然arguments的主要用途是保存函数参数,但这个对象有一个属性——callee,该属性是一个指针,指向拥有这个arguments对象的函数
所以callee的作用就是来指向当前对象
看一个阶层函数的例子就会明白他的用途了:
/*
* 普通的递归阶层函数
*/
function factorial(num){
if(num <= 1){
return 1;
}else{
return num *factorial(num-1);
}
}
上面的代码运行没有问题,但这个函数的执行与函数名factorial紧紧耦合在一起了,要是改变了函数名,里面的函数名也要随着改变,这样很不方便,所以我们用arguments.callee来消除这种耦合。
//使用callee属性的递归阶层函数
function factorial1(num){
if(num <= 1){
return 1;
}else{
return num * arguments.callee(num-1);
}
}
根据callee的定义,callee是arguments对象的一个属性,指向拥有arguments对象的函数,这个函数就是factorial1 (factorial1=arguments.callee),他们指向的都是上面的递归函数。请记住函数的名字仅仅是一个包含指针的变量而已。
2.caller
caller是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)
返回一个对函数的引用,该函数调用了当前函数。
function a(){//父函数
b();
};
function b(){
console.info(b.caller);
};
a(); //结果就是弹出函数a和内容
可以看到函数b的属性caller调用当前函数b的函数引用a(就是指向当前函数b的父函数a)
3.将callee和caller结合起来使用
function b(){
alert(b.caller);
};
从这个代码可以看出b函数中调用了b函数名,这样当函数名改变时就很不方便,我们需要替换里面的那个b
前面我们知道用什么方法可以指向当前对象,下面我们就来修改一下:
(function a(){
b();
})();
function b(){
alert(arguments.callee.caller);//用arguments.callee代替了b
};
4.实例:斐波那契数列(用递归思想)
如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第n个月能繁殖成多少对兔子?(使用callee完成)
var result=[];
function fn(n){
if(n==1){
return 1;
}else if(n==2){
return 1;
}else {
if(result[n]){
return result[n];
}else{
//arguments.callee(...)=fn(...)
result[n]=arguments.callee(n-1)+arguments.callee(n-2);
return result[n];
}
}
}
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
希望本文所述对大家JavaScript程序设计有所帮助。
java caller_JavaScript中callee和caller的区别与用法实例分析相关推荐
- java caller_java中callee获取caller
1.什么是JVM? JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是,C编 ...
- php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析
本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...
- callee和caller的区别和用法
先来一个通俗易懂的简单描述: 简单一点来说caller是指向调用当前函数的函数,比如b函数调用a函数,那么a.caller则是b的引用:callee是arguments的一个属性,指向其函数自身,比如 ...
- java的无参构造方法_Java的无参构造函数用法实例分析
本文实例讲述了Java的无参构造函数用法.分享给大家供大家参考,具体如下: 一 点睛 1 如果一个类没有定义任何构造函数,那么该类会自动生成1个默认的构造函数.默认构造函数没有参数. 2 如果一个类定 ...
- callee与caller的区别
Javascript arguments.callee和caller的区别 一.callee 在学习callee之前,需要先学习arguments. arguments: 含义:该对象代表正在执行的函 ...
- [js] callee和caller的区别和作用是什么?
[js] callee和caller的区别和作用是什么? arguments.callee 指的是当前函数 Function.caller 指的是调用当前函数的函数 举个例子:function a() ...
- arguments.callee和caller的区别
arguments.callee和caller的区别 1.arguments arguments 是一个对应于传递给函数的参数的类数组对象. 白话就是这是一个函数的传参的集合,不是数组,但是是一个类数 ...
- Javascript中callee和caller的作用
Javascript中callee和caller的作用 caller 是返回⼀个对函数的引⽤,该函数调⽤了当前函数: callee 是返回正在被执⾏的 function 函数,也就是所指定的 func ...
- js中几个对象的区别和用法
js中几个对象的区别和用法 今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href" ...
最新文章
- 用高中数学理解AI “深度学习”的基本原理
- 华为鸿蒙第一期名单,机型正式确认,鸿蒙2.0第一批名单曝光!花粉:华为不够厚道...
- Android 设计模式 - 观察者模式
- linux——sed 流编辑器
- 八.linux系统文件属性知识
- 程序员一定会有35岁危机吗?
- 【Tomcat】Tomcat配置与优化(内存、并发、管理)【自己配置】
- 基于javaweb jsp+servlet学生宿舍管理系统
- jquery双击一行跳转页面_Word软件使用小技巧,鼠标双击在不同操作对象中有不同的功能...
- 残差网络ResNet
- dynamips中网卡参数如何和网络连接中的具体网卡匹配
- 计算机工程师英语简历模板,计算机软件工程师英文简历模板
- 源代码加密几种简单方法
- ORR和BIC伪指令应用
- springboot集成solr实现全局搜索系列
- 分享830个蜘蛛IP段(分析1G日志得)
- JSP实验室预约管理系统
- 加密市场的6大长期预测:以太坊将比许多人想象的更重要
- python模拟比赛测试胜率
- 3Com Network Supervisor与IBM Tivoli NetView两款网管软件操作视频
热门文章
- 阿里云安全组已经开放端口但是服务器端口还是不能访问
- 做一个电商网站需要多少钱
- 链表:递归中删除结点不发生断链
- 用计算机判断函数单调性吗,高中数学函数单调性的判断方法(全)
- 武汉音乐学院计算机音乐作曲,武汉音乐学院作曲系6部学生作品入围2019年中国大学生计算机设计大赛决赛...
- 怎么实现红鲤鱼与绿鲤鱼与驴代码
- html屏幕缩小图片不失真,html图片失真怎么办
- 【ORACLE】RAC 磁盘超时,导致数据库重启 WARNING: Waited 15 secs for write IO to PST disk 0 in group 1.
- 安装DCOS,关于docker异常引发的调查
- hive的distribute by应用