应该用“属性”来称呼caller和callee,而不是方法。

caller:返回调用当前函数的函数的引用。a调用b,则返回a(a是boss,因为a把b叫过去干活了);

callee: 这个属性中保存b(b是被叫过去差遣的)。返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。

如果函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。(全局作用域中调用,值为null)

--但是callee属性有什么用处呢??

1.判断形参长度和实参长度是否一致。

  arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用时形参长度是否和实参长度一致。(该属性仅当相关函数正在执行时才可用。)

    //callee可以打印其本身
function calleeDemo() {
alert(arguments.callee);
}
//用于验证参数
function calleeLengthDemo(arg1, arg2) {
if (arguments.length == arguments.callee.length) {
window.alert("验证形参和实参长度正确!");
return;
} else {
alert("实参长度:" + arguments.length);
alert("形参长度: " + arguments.callee.length);
}
}
//递归计算
var sum = function (n) {
if (n < = )
return ;
else
return n +arguments.callee(n - )
}

2.比较一般的递归函数

    var sum = function(n) {
if ( == n)
return ;
else
return n + sum(n - );
}   alert(sum(100))

  函数内部包含了对sum自身的引用,函数名仅仅是一个变量名,在函数内部调用sum即相当于调用了一个全局变量,不能很好地体现出是调用自身。这时使用callee会是一个比较好的办法。

3.有利于匿名函数的递归或者保证函数的封装性(暂不理解)

caller属性的用法:

    function callerDemo() {
if (arguments.caller) {
var a = callerDemo.caller.toString();
alert(a);
} else {
alert("this is a top function");
}
}
function handleCaller() {
callerDemo();
}
handleCaller();
function calleeDemo() {
alert(arguments.callee);
}
calleeDemo();

最新文章

  1. adb 的使用
  2. JS开发windows phone8.1系列之1
  3. 有关于eclipse启动不了的问题
  4. 【Hibernate】Hibernate系列7之二级缓存
  5. Java中构造函数执行顺序的问题
  6. 关于名称重整(name mangling)、多态性的一些简单介绍
  7. java事务管理(二)
  8. SQL注入(四)
  9. JavaScript中Array.prototype.sort()的详解
  10. java实现——006重建二叉树
  11. AF_INET
  12. 再起航,我的学习笔记之JavaScript设计模式28(委托模式)
  13. TFBOY 养成记 一些比较好多文章。
  14. R语言的神奇之基于向量
  15. PowerDesigner 提示 Existence of index、key、reference错误
  16. tensorflow保存读取-【老鱼学tensorflow】
  17. Python3-IO模型
  18. Kaggle比赛:从何着手?
  19. spring-boot入门总结
  20. wechat 网页版通信全过程

热门文章

  1. JS获取当前周
  2. [.Net Core] 在 Mvc 中简单使用日志组件
  3. 深度学习基础网络 ResNet
  4. 【Java】 重拾Java入门
  5. linux --&gt; 文件系统十问
  6. c++ --&gt; typedef用法总结
  7. Java NIO系列教程(六) 多路复用器Selector
  8. java.lnag.Throwable详细解读
  9. opencv配置
  10. IDEA 中配置JDK