[Javascript] arguments.callee.caller(如何知道到函数被谁调用了)
2012-02-10 14:28
381 查看
有人曾问过我,在JavaScript中是否有办法得到函数调用者的信息,就是说要知道调用某个函数的函数。当时我想既然在函数内部有arguments.callee,那么是否有arguments.caller呢?可惜的是当我在Firefox中试验时,这个值始终是undefined。另外,我发现ActionScript
3.0之前的版本有arguments.caller,但是在3.0中被拿掉了。我更加肯定地认为JavaScript中也不会有这个东西,于是告诉他:没办法。
最近偶然看到一篇文章,发现真正的caller属性长在function上,而不是arguments上。所以在函数内部可通过函数名.caller或者arguments.callee.caller取到调用者的信息。不过当函数在全局环境下调用时这个值是null。
比如:
function a(){
alert(a.caller);
alert(arguments.callee.caller);
}
function b(){
a();
}
b();
当我们在浏览器中执行这段代码时,可以看到结果:
这样我们就知道是b函数调用了a函数。
最后再说一个IE下奇怪的发现。在IE中,arguments.caller并不是undefined,也不是function,而是个object。但是遍历不到它任何属性,难道只是个{
}?那它是用来干什么用的呢?
3.0之前的版本有arguments.caller,但是在3.0中被拿掉了。我更加肯定地认为JavaScript中也不会有这个东西,于是告诉他:没办法。
最近偶然看到一篇文章,发现真正的caller属性长在function上,而不是arguments上。所以在函数内部可通过函数名.caller或者arguments.callee.caller取到调用者的信息。不过当函数在全局环境下调用时这个值是null。
比如:
function a(){
alert(a.caller);
alert(arguments.callee.caller);
}
function b(){
a();
}
b();
当我们在浏览器中执行这段代码时,可以看到结果:
这样我们就知道是b函数调用了a函数。
最后再说一个IE下奇怪的发现。在IE中,arguments.caller并不是undefined,也不是function,而是个object。但是遍历不到它任何属性,难道只是个{
}?那它是用来干什么用的呢?
相关文章推荐
- javascript 的函数调用过程中的arguments,callee,caller,apply,call
- javascript的函数arguments属性和callee调用递归
- JavaScript-Arguments.callee 函数
- JavaScript中的arguments,callee,caller,call,appy
- arguments.callee 与 函数.caller
- javascript的递归调用 特殊指针arguments.callee
- JavaScript中的arguments、caller和callee的理解
- 如何在页面每次刷新的时候可以调用一个javascript写的函数
- ...后台代码中如何调用 javascript 函数的问题! - ASP.NET专题(按钮事件中调用JS文件中函数)
- Asp.net(C#) 如何在后台调用javascript 函数
- JavaScript中的arguments,callee,caller,call,appy
- javascript中arguments,callee,caller
- javascript下arguments,caller,callee,call,apply示例及理解
- JavaScript 之arguments、caller 和 callee 介绍
- javascript : arguments.callee.caller.arguments[0]
- JavaScript中的arguments,callee,caller,call,appy
- JavaScript中的arguments,callee,caller(转)
- ...后台代码中如何调用 javascript 函数的问题! - ASP.NET专题(按钮事件中调用JS文件中函数)
- javascript的隐含参数(arguments,callee,caller)
- JavaScript中的arguments,callee,caller,call,appy