函数自身有个caller属性,便是调用当前函数的上层函数;看以下代码:
<script>
function WhoCallMe(){
alert("My caller is "+WhoCallMe.caller);
};
function CallerA(){
WhoCallMe();
}
function CallerB(){
WhoCallMe();
}
alert(WhoCallMe.caller);
WhoCallMe();
CallerA();
</script>
alert(WhoCallMe.caller);输出的是:null
WhoCallMe();输出的是:my caller is null;
CallerA();输出的是:function CallerB(){
WhoCallMe();
};
解析:
如果函数的caller是null,函数未调用或全局调用;
可以看出其实caller是动态变化的。由null变化为调用函数,然后在恢复;
注:目前chrom/firefox/opera均支持。(原书中写明opera不支持caller属性,截止写这篇文章时,已经可以使用)