arguments.callee.caller.arguments[0]

今天在网上看见这种调用,据说是解决火狐下事件或得问题的,var evt=window.event|arguments.callee.caller.arguments[0]

argument.callee就是函数本身,caller函数的调用函数.

 

 

<script type='text/javascript'>
function myFunc(){
    alert(arguments.callee.caller.toString())
   
var ev = window.event || arguments.callee.caller.arguments[0]
        ,et 
= ev.srcElement || ev.target;
}
</script>

我们把argument.callee.caller的函数体输出,看看到底在ie和ff下有何区别.

可以看到ie下输出为

function  anonymous(){
   myFunc()
}

ff下输出为

function  onclick(event){
    myFunc();
}

在html控件中直接注册事件在ie/ff下表现的不同, ie下定义了一个匿名函数,内部再执行用户定制的函数(myFunc),而ff下则有所

不同,首先ff下定义了一个与节点事件同名的函数,这里是onclick事件,所以是function onclick,然后event作为一个参数传入,内部再执行myFunc.

所以当事件触发时,在myFunc里,argument.callee.caller就是指向function onclick,当然,argument.callee.caller.arguments[0]即为event了.

你可能感兴趣的:(JavaScript,html,IE)