caller和callee属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了caller和callee属性相关的知识,希望对你有一定的参考价值。

ECMAScript5规范了函数对象的属性:caller.除了Opera的早期版本不支持,其他浏览器都支持这个ECMAScript3并没有定义的属性。

[IE,Firefox,Chrome,Safari的所有版本以及Opera9.6都支持caller属性]

这个属性保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null。

functionName.caller 返回调用者。 

eg:   

1 function outer(){
2    inner();
3 }
4 function inner(){
5    alert(inner.caller);
6 }
7 outer();

以上代码会导致警告框显示outer()函数的源代码。因为outer()调用了inner(),所以inner.caller()就指向outer()。为了实现更松散的耦合,也可以通过argument.callee.caller来访问相同的信息。

callee   返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文. callee是arguments 的一个属性成员,它表示对函数对象本身的引用,这有利于匿名 

在函数的严格模式下运行时,访问argument.callee会导致错误,ECMAScript5还定义了argument.callee属性,严格模式下会导致错误,非严格模式下这个属性始终是undefined。这些变化都是为了加强语言的安全性,这样第三方代码就不能在相同的环境里窥视其他代码了。

严格模式还有一个限制:不能为函数的caller属性赋值,否则会导致错误。

以上是关于caller和callee属性的主要内容,如果未能解决你的问题,请参考以下文章

arguments对象的callee属性和caller属性

caller和callee的区别

js中的caller属性和callee属性

caller和callee的区别

caller和callee的区别

caller和callee的区别