当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript教程:caller函数和callee属性

Javascript
jQuery代码:jQuery控制表单里的回车键
用DIV完美模拟createPopup 弹出窗口(脚本之家修正版),支持Firefox,ie,chrome
jQuery Flash/MP3/Video多媒体插件
9个JavaScript评级/投票插件
JS实现的radio图片选择按钮效果
IE中checkbox在刷新后初始化的问题
JavaScript 学习笔记(十一)
JS 对象介绍
javascript 哈希表(hashtable)的简单实现
jquery 防止表单重复提交代码
js parsefloat parseint 转换函数
javascript parseInt与Number函数的区别
JavaScript 学习笔记(十二) dom
JavaScript 学习笔记(十三)Dom创建表格
javascript 实现自由落体的方块效果
javascript 获取url参数和script标签中获取url参数函数代码
JAVASCRIPT style 中visibility和display之间的区别
javascript 拖放效果实现代码
jquery last-child 列表最后一项的样式
Jquery实战_读书笔记1—选择jQuery

Javascript教程:caller函数和callee属性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 134 ::
收藏到网摘: n/a

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

functionName.caller

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

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

01.function callerDemo() {
02.    if ( arguments.caller) {
03.        var a= callerDemo.caller.toString();
04.        alert(a);
05.    } else {
06.        alert("this is a top function");
07.    }
08.}
09.function handleCaller() {
10.    callerDemo();
11.}
12.handleCaller();
13.function calleeDemo() {
14.     alert(arguments.callee);
15.}
16.calleeDemo();

=====================================================================

callee

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

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

说明

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

callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是形参长度,由此可以判断调用时形参长度是否和实参长度一致。

示例

01.//callee可以打印其本身
02.function calleeDemo() {
03.     alert(arguments.callee);
04.}
05.//用于验证参数
06.function calleeLengthDemo(arg1, arg2) {
07.    if (arguments.length==arguments.callee.length) {
08.         window.alert("验证形参和实参长度正确!");
09.        return;
10.     } else {
11.         alert("实参长度:" +arguments.length);
12.         alert("形参长度: " +arguments.callee.length);
13.     }
14.}
15.//递归计算
16.var sum = function(n){
17.  if (n < = 0)                       
18.  return 1;
19.  else
20.    return n +arguments.callee(n - 1)
21.}

比较一般的递归函数:

1.var sum = function(n){
2.    if (1==n) return 1;
3.else return n + sum (n-1);

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