为什么会有一个'事件'变量可用而没有在上游发生事件时定义?

时间:2015-08-06 08:17:48

标签: javascript jquery google-chrome knockout.js

今天我偶然发现了一个奇怪的行为。基本上,我有一个绑定到knockout.js点击事件的函数。该函数正在利用淘汰赛事件,但没有明确地将其作为论据。

this.myClickHandler = function(){
    console.log(event); //event gets logged in Chrome/IE11, not Firefox
}

对我来说这看起来很奇怪,但在Chrome中它按预期工作。它在IE11中也能正常工作。但是在Firefox中,它没有运行。一旦我明确地在所有浏览器中都有效。这就是我期望它完全可以工作所需要的。

this.myClickHandler = function(model, event){ //event is second parameter passed from knockout click event
    console.log(event); //event gets logged in all browsers
}

我玩了一个游戏并用jQuery重现了这个



    function func(){
     alert(event);
    }
    
    function runFunc(callback){
      callback();
    }
    
    $(document).ready(function(){
      runFunc(func);
    });

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

这是怎么回事?为什么我可以访问名为&#39; event&#39;在某些浏览器中,但在其他浏这是预期的行为吗?

1 个答案:

答案 0 :(得分:3)

从IE的旧版本开始,事件对象未传递给处理程序方法,而是在全局上下文中设置。

为了向后兼容,IE仍支持此模型,并且chrome还添加了对此功能的支持。但FF并不支持它。