js callee,caller学习

原文地址:js callee,caller学习javascript

/*
* caller 返回一个对函数的引用,该函数调用了当前函数。
* 若是函数是由顶层调用的,那么 caller包含的就是 null 。
* 若是在字符串上下文中使用 caller属性,那么结果和 functionName.toString
* 同样,也就是说,显示的是函数的反编译文本。html

* 在一个函数调用另外一个函数时,被调用函数会自动生成一个caller属性,指向调用它的函数对象。若是该函数当前未被调用,或并不是被其余函数调用,则caller为null。java

*/app

function callerDemo() {
if (callerDemo.caller) {
// var a= callerDemo.caller.toString();
// alert(a); 
//等价于下面表达式
alert(callerDemo.caller);
} else {
alert("this is a top function");
}
}
function handleCaller() {
callerDemo();
}
// handleCaller();	
// callerDemo();

  

/*-------------------------------------------------------
* callee 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。
* callee属性是 arguments 对象的一个成员,它表示对函数对象自己的引用,
* 这有利于匿名函数的递归或者保证函数的封装性
* 该属性仅当相关函数正在执行时才可用
* arguments.length是实参长度,arguments.callee.length是形参长度,
* 由此能够判断调用时形参长度是否和实参长度一致。
*/函数

function calleeDemo() {
// alert(n);
// arguments.callee(n-1);
alert(arguments.callee);
}
// calleeDemo(); //返回函数toString形式

//递归计算
var sum = function(n){
if (n <= 0) 
return 1;
else
return n + arguments.callee(n - 1);
// arguments.callee调用当前正在执行的函数,即sum自己!
}
// alert(sum(3));

  

/*----------------------------------------
* 两者区别
*/学习

function inner(){
alert(arguments.callee);//指向拥有这个arguments对象的函数,即inner()
alert(arguments.callee.caller);//这个属性保存着调用当前函数的函数的引用,即outer()
}
function outer(){
inner();
}
// outer();//先弹出inner()函数再弹出outer()函数自己内容!

 

参考:理解JavaScript中的arguments,callee,caller,apply this

JavaScript 之arguments、caller 和 callee 介绍spa

相关文章
相关标签/搜索