本文实例讲述了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的区别与用法实例分析相关推荐

  1. java caller_java中callee获取caller

    1.什么是JVM? JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是,C编 ...

  2. php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析

    本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...

  3. callee和caller的区别和用法

    先来一个通俗易懂的简单描述: 简单一点来说caller是指向调用当前函数的函数,比如b函数调用a函数,那么a.caller则是b的引用:callee是arguments的一个属性,指向其函数自身,比如 ...

  4. java的无参构造方法_Java的无参构造函数用法实例分析

    本文实例讲述了Java的无参构造函数用法.分享给大家供大家参考,具体如下: 一 点睛 1 如果一个类没有定义任何构造函数,那么该类会自动生成1个默认的构造函数.默认构造函数没有参数. 2 如果一个类定 ...

  5. callee与caller的区别

    Javascript arguments.callee和caller的区别 一.callee 在学习callee之前,需要先学习arguments. arguments: 含义:该对象代表正在执行的函 ...

  6. [js] callee和caller的区别和作用是什么?

    [js] callee和caller的区别和作用是什么? arguments.callee 指的是当前函数 Function.caller 指的是调用当前函数的函数 举个例子:function a() ...

  7. arguments.callee和caller的区别

    arguments.callee和caller的区别 1.arguments arguments 是一个对应于传递给函数的参数的类数组对象. 白话就是这是一个函数的传参的集合,不是数组,但是是一个类数 ...

  8. Javascript中callee和caller的作用

    Javascript中callee和caller的作用 caller 是返回⼀个对函数的引⽤,该函数调⽤了当前函数: callee 是返回正在被执⾏的 function 函数,也就是所指定的 func ...

  9. js中几个对象的区别和用法

    js中几个对象的区别和用法 今天总结一下js中几个对象的区别和用法: 首先来说说 parent.window与top.window的用法 "window.location.href" ...

最新文章

  1. 用高中数学理解AI “深度学习”的基本原理
  2. 华为鸿蒙第一期名单,机型正式确认,鸿蒙2.0第一批名单曝光!花粉:华为不够厚道...
  3. Android 设计模式 - 观察者模式
  4. linux——sed 流编辑器
  5. 八.linux系统文件属性知识
  6. 程序员一定会有35岁危机吗?
  7. 【Tomcat】Tomcat配置与优化(内存、并发、管理)【自己配置】
  8. 基于javaweb jsp+servlet学生宿舍管理系统
  9. jquery双击一行跳转页面_Word软件使用小技巧,鼠标双击在不同操作对象中有不同的功能...
  10. 残差网络ResNet
  11. dynamips中网卡参数如何和网络连接中的具体网卡匹配
  12. 计算机工程师英语简历模板,计算机软件工程师英文简历模板
  13. 源代码加密几种简单方法
  14. ORR和BIC伪指令应用
  15. springboot集成solr实现全局搜索系列
  16. 分享830个蜘蛛IP段(分析1G日志得)
  17. JSP实验室预约管理系统
  18. 加密市场的6大长期预测:以太坊将比许多人想象的更重要
  19. python模拟比赛测试胜率
  20. 3Com Network Supervisor与IBM Tivoli NetView两款网管软件操作视频

热门文章

  1. 阿里云安全组已经开放端口但是服务器端口还是不能访问
  2. 做一个电商网站需要多少钱
  3. 链表:递归中删除结点不发生断链
  4. 用计算机判断函数单调性吗,高中数学函数单调性的判断方法(全)
  5. 武汉音乐学院计算机音乐作曲,武汉音乐学院作曲系6部学生作品入围2019年中国大学生计算机设计大赛决赛...
  6. 怎么实现红鲤鱼与绿鲤鱼与驴代码
  7. html屏幕缩小图片不失真,html图片失真怎么办
  8. 【ORACLE】RAC 磁盘超时,导致数据库重启 WARNING: Waited 15 secs for write IO to PST disk 0 in group 1.
  9. 安装DCOS,关于docker异常引发的调查
  10. hive的distribute by应用