js中的caller和callee属性介绍和例子


Posted in Javascript onJune 07, 2014

一、caller

返回一个对函数的引用,该函数调用了当前函数。

functionName.caller

functionName 对象是所执行函数的名称。

说明

对于函数来说,caller 属性只有在函数执行时才有定义。 如果函数是由 Javascript 程序的顶层调用的,那么 caller 包含的就是 null 。

下面的例子说明了 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();

二、callee

返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。

[function.]arguments.callee
可选项 function 参数是当前正在执行的 Function 对象的名称。

说明

callee 属性的初始值就是正被执行的 Function 对象。

callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候用于验证还是比较好的。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 < = 0)                       
  return 1;
  else
    return n +arguments.callee(n - 1)
}

比较一般的递归函数:
var sum = function(n){
    if (1==n) return 1;
else return n + sum (n-1);

调用时:alert(sum(100));

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

Javascript 相关文章推荐
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
基于jquery实现控制经纬度显示地图与卫星
May 20 Javascript
Jquery网页出现的乱码问题的三种解决方法
Jun 30 Javascript
JS性能优化笔记搜索整理
Aug 21 Javascript
JavaScript获取XML数据附示例截图
Mar 05 Javascript
javascript跨浏览器的属性判断方法
Mar 16 Javascript
JS中的Replace方法使用经验分享
May 20 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
webstorm添加vue.js支持的方法教程
Jul 05 Javascript
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
基于Vue实现可以拖拽的树形表格实例详解
Oct 18 Javascript
微信小程序实现左滑动删除效果
Mar 30 Javascript
javascript中拼接HTML字符串的最快、最好的方法
Jun 07 #Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 #Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 #Javascript
jQuery的缓存机制浅析
Jun 07 #Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 #Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
Jun 06 #Javascript
判断iframe里的页面是否加载完成
Jun 06 #Javascript
You might like
php URL验证正则表达式
2011/07/19 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
php实现微信支付之现金红包
2018/05/30 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
javascript一点特殊用法
2008/05/28 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
python3正则提取字符串里的中文实例
2019/01/31 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python找出因数与质因数的方法
2019/07/25 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
Python自动化操作实现图例绘制
2020/07/09 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
翻译学院毕业生自荐书
2014/02/02 职场文书
股东协议书范本
2014/04/14 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
民主生活会剖析材料
2014/09/30 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python