在之前的文章中我说到了arguments,现在来说一下他的属性callee和一个长得相似的双胞胎弟弟caller:

首先说callee,来一段代码:

    var a=function(){console.log(arguments.callee);}var b=function(){a()}b();

这段代码在chrome中输出的是:

ƒ (){console.log(arguments.callee);}

这个函数和a函数是不是一模一样?

callee返回正在执行的函数本身的引用。callee是arguments的一个属性,这个属性是一个指针,指向这个拥有arguments对象的函数,arguments是调用函数,那么这个callee就是调用函数的啦)
首先我们来说一个用callee解决的例子,阶乘的计算:
  function factorial(num){if(num<=1){}else{return num*factorial(num-1);}}
上面的代码是用的是函数名。上述方法会增强耦合性,为了降低耦合性我们就用callee,而且无论引用函数的时候是什么名字都可以完成递归调用。看看callee:
   function factorial(num){if(num<=1){return 1;}else{return num*arguments.callee(num-1);}}
caller:和他相似的我们还有一个caller,es5中规范化了另外一个函数对象属性caller这个属性中保存着调用当前的函数的函数引用,如果是全局作用于中调用当前的函数就返回null
    
a中alert出来的是null,毕竟你是在全局中调用的a的函数。b函数相当于没有用。
好了,这么多例子都不懂的话,可能是我写的太差吧。
    // var a=function(){//     alert(a.caller);// }//定义一个函数。里面输出a.caller// var b=function(){//     a();// }//定义一个函数调用那个a函数;// b();//输出b函数。
上面的例子中,是调用的b根据caller的特性就知道了答案。
    // var a=function(){//     alert(a.caller);// }//定义一个函数。里面输出a.caller// var b=function(){//     a();// }//定义一个函数调用那个a函数;// a();//null(a在任何函数中被调用,即为顶层函数,输出的就是null),上面的例子一中,a函数是在b中调用的所以不是顶层不反悔null,返回当前的调用就是b函数啦,而这个例子是在全局中调用的自然是null
最后一个例子帮助深刻地理解顶层:要是a中也有了一个函数
var c=function(){alert(c.caller);
}
var a=function(){c()alert(a.caller);
}
var b=function(){a();
}
a();
这个例子在c中的alert出来的是a函数,原因是在a中调用。
function outer(){inner();}function inner(){
1.      alert(arguments.callee.caller);2.      alert(inner.caller)//上面的这两行是一样的1比2 的耦合性更松散3.   alert(arguments.caller);//undefined
//        3.这行代码在严格模式下会报错,但是非严格模式下就是undefined}outer();
//    说是定义argumnets.callee属性是为了分清qrguments.caller和caller
//    属性严格模式下不能为caller属性赋值,不然报错

callee和caller相关推荐

  1. js函数的内部属性---arguments,callee,caller

    在接下来的几篇文章中,我大家谈谈函数的内部属性,arguments,callee,caller (1)arguments,是一个类数组对象,其中包含了传入函数的所有参数,主要用途是,保存函数的参数: ...

  2. ES5-13 对象属性遍历、this、callee、caller

    链式调用 在每个函数内部return this 访问对象属性 点语法 []中括号内是字符串或是变量 数组是特殊的对象 对象属性遍历 for in(遍历对象或数组) - 不必再用Object.keys那 ...

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

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

  4. callee、caller、call、apply、bind这些方法的含义和使用

    在学校时间比较充裕,所以利用这段时间好好回顾下了js的基础.这回说下这五个函数属性方法,它们分别是:callee.caller.call.apply.bind 这5个方法在刚学js的时候一直理解不透, ...

  5. java caller_JavaScript中callee和caller的区别与用法实例分析

    本文实例讲述了JavaScript中callee和caller的区别与用法.分享给大家供大家参考,具体如下: 1.callee 在函数的内部,有两个特殊的对象:arguments和this.其中arg ...

  6. callee与caller的区别

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

  7. JavaScript中callee和caller的用法解读

    1.callee: callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数. 作用:指向当前对象. 例1: <script type="text/java ...

  8. 区分callee和caller

    callee和caller是对象的两个属性,今天就来区分一下这两个: callee是arguments对象的一个属性,指向 arguments 对象的函数,即当前函数. caller是函数对象的一个属 ...

  9. arguments.callee和caller的区别

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

最新文章

  1. 科普| 越来越火的图数据库究竟是什么?
  2. crontab 命令
  3. 聊城大学计算机学院韩玉艳,人工蜂群优化及其在资源管理中的应用.doc
  4. net use命令详解
  5. 16-爬虫之scrapy框架手动请求发送实现全站数据爬取03
  6. P2596 [ZJOI2006]书架(fhq treap)
  7. 微信这10个牛X的隐藏功能,你知道几个?
  8. Python OS sys模块
  9. 之间有什么区别。 (点)和$(美元符号)?
  10. 雪碧+滑动门,自适应宽度菜单
  11. 2021-08-08备份数据库
  12. java中装饰器_java设计模式之装饰器模式以及在java中作用
  13. 常见查找算法之—二分查找
  14. MQTT、CoAP 还是 LwM2M?主流物联网协议如何选择
  15. SaaS销售迎来破局 渠道分销重回主场
  16. unity再战PBR材质流程与材质制作实践
  17. iOS自定义身份证键盘
  18. 11届蓝桥杯单片机设计与开发决赛
  19. IPSC和IPSC衍生细胞
  20. java面试题:编写java程序,随机生成n个m以内的加减法算式,形如a±b=c,其中n,m∈N+,a,b,c∈[0,m].请结合自身请款勾选作答的题目,然后在下面写出代(伪)码.

热门文章

  1. 股神投资策略及理论-6位大师比较
  2. Cadence OrCAD Capture 复制粘贴电路时保持元器件自动编号的方法图文教程
  3. 商业周刊:“微软大学”的11大杰出学生
  4. CC++程序员“是否应该掌握”【某种汇编语言】?
  5. c+和python先学哪个,c语言和python先学哪个比较简单
  6. 详解《必克英语怎么样》同比有什么优势?靠不靠谱
  7. 女生二本学护理专业和计算机专业哪个好,二本女生适合的6大“医学专业”,好就业,工作压力小,还很稳定...
  8. Flutter 上下左右滚动Table
  9. 语音mos测试软件,TD语音MOS测试方法.ppt
  10. c语言中字符型常量在内存中存放的是,【2017年整理】c语言中字符型常量与变量使用注意事项.doc...