ECMAScript5规范了函数对象的属性:caller.除了Opera的早期版本不支持,其他浏览器都支持这个ECMAScript3并没有定义的属性。
[IE,Firefox,Chrome,Safari的所有版本以及Opera9.6都支持caller属性]
这个属性保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,它的值为null。
functionName.caller 返回调用者。
eg:
function outer(){ inner(); } function inner(){ alert(inner.caller); } outer();
以上代码会导致警告框显示outer()函数的源代码。因为outer()调用了inner(),所以inner.caller()就指向outer()。为了实现更松散的耦合,也可以通过argument.callee.caller来访问相同的信息。
callee 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文. callee是arguments 的一个属性成员,它表示对函数对象本身的引用,这有利于匿名
在函数的严格模式下运行时,访问argument.callee会导致错误,ECMAScript5还定义了argument.callee属性,严格模式下会导致错误,非严格模式下这个属性始终是undefined。这些变化都是为了加强语言的安全性,这样第三方代码就不能在相同的环境里窥视其他代码了。
严格模式还有一个限制:不能为函数的caller属性赋值,否则会导致错误。