先来一个通俗易懂的简单描述:

简单一点来说caller是指向调用当前函数的函数,比如b函数调用a函数,那么a.caller则是b的引用;callee是arguments的一个属性,指向其函数自身,比如在a函数中,arguments.callee就是a,这个特性可以用来计算正整数的阶乘,x*arguments.callee(x-1)也可以用来比较实参和形参,arguments.length和arguments.callee.length。

caller
caller返回一个函数的引用,这个函数调用了当前的函数。
使用这个属性要注意:
1 这个属性只有当函数在执行时才有用
2 如果在javascript程序中,函数是由顶层调用的,则返回null

functionName.caller: functionName是当前正在执行的函数。

var a = function() {
alert(a.caller);
}
var b = function() {
a();
}
b();

上面的代码中,b调用了a,那么a.caller返回的是b的引用,结果如下:
var b = function() { 
a(); 

如果直接调用a(即a在任何函数中被调用,也就是顶层调用),返回null:

var a = function() {
alert(a.caller);
}
var b = function() {
a();
}
//b();
a();

输出结果:
null

callee
callee返回正在执行的函数本身的引用,它是arguments的一个属性
使用callee时要注意:
1 这个属性只有在函数执行时才有效
2 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length
3 它可以用来递归匿名函数。

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

a在b中被调用,但是它返回了a本身的引用,结果如下:
var a = function() { 
alert(arguments.callee); 
}

callee和caller的区别和用法相关推荐

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

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

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

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

  3. callee与caller的区别

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

  4. arguments.callee和caller的区别

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

  5. 函数的callee和caller的区别和用处

    1. callee \ arguements.callee 是什么? 就是一个指针 可以指向函数本身 1.每个函数都存在一个arguements的对象 尔callee存在于arguements cal ...

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

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

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

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

  8. model.fit以及model.fit_generator区别及用法

    model.fit以及model.fit_generator区别及用法_猫爱吃鱼the的博客-CSDN博客

  9. js中!和!!的区别及用法

    js中!和!!的区别及用法 js中!的用法是比较灵活的,它除了做逻辑运算常常会用!做类型判断,可以用!与上对象来求得一个布尔值, 1.!可将变量转换成boolean类型,null.undefined和 ...

最新文章

  1. python的list去除重复
  2. ASP.NET内部原理(HttpHandler和HttpModule)
  3. 最高201万!华为高薪招应届生,8位获聘者大有来头
  4. 阿里云专家手把手教你重塑 IT 架构!
  5. 431.chapter10. working with flat files
  6. 三维家可以导入别人的方案吗_三维激光扫描仪
  7. [精品]CSAPP Bomb Lab 解题报告(三)
  8. Notepad++高亮AS文件
  9. SoftGrid教程系列
  10. XenCenter的安装与使用
  11. Win10开机免UAC自启动锐捷客户端
  12. ubuntu下搭建pptp服务器
  13. 仿短视频竖屏播放美nv网站源码
  14. Gitlab的介绍及使用
  15. 智能餐厅摆动手势点餐人脸识别支付
  16. html怎么自动增加序号,css如何使用计数器给元素自动编号?
  17. 地理总结(三)--川南川北川东川西划分
  18. 最新详细的 VM ware 下载 与 安装
  19. 验证集和测试集的区别
  20. android新浪微博demo登陆后注销再次登录一闪而过问题

热门文章

  1. Little Fighter:旺角——NFT 系列来袭!
  2. Xcode使用教程详细讲解 (下)
  3. Jupyter结合pyechart安装的跳坑小指南(结合自己遇到的问题给大家节省些许时间)
  4. c语言如何同时操作多个io,C语言怎么用OVERLAPPED进行重叠IO操作?
  5. PyQt写的简单图像标注工具
  6. Markdown入门笔记
  7. erput实现学生成绩管理系统
  8. 基于在STM32下完成FreeRTOS的多任务程序开发,多任务串口以及AHT20封装库,原理图,PCB图以及AHT20(实际用到的是LMT70)及采集一次温度数据的模块实战
  9. 低功耗蓝牙Ble的详细使用流程
  10. 边界值法中的上点、内点和离点的定义