在JavaScript中的函数中提供事件参数的一般方法

时间:2015-01-08 22:34:01

标签: javascript events arguments

我几乎以同样的方式宣布事件论证多年和年:

 element.onclick = function(e){};
 element.onclick = function(event){};

 element.addEventListener("click", function(e){}, false);
 element.addEventListener("click", eventHandler, false); //preferred version

 function eventHandler(e){} 

 etc.
  • 必须是e还是event
  • 它是作为最后一个参数追加还是也可以是第一个?

你能做到这一点:

 function eventHandler(e, a, b, c, d){}

e仍在引用该事件,还是d

要完成上述工作,您需要明确使用关键字event

所以一般的问题是:在JavaScript中的函数中声明事件参数时有哪些经验法则?

2 个答案:

答案 0 :(得分:1)

在下文中,我假设您指的是关于DOM事件处理程序。

  

必须是e还是event

没关系。我们所关心的可能是ajdlahksjd

  

它是作为最后一个参数追加还是也可以是第一个?

事件对象将始终作为第一个参数传递给处理程序。

  

你能做到这一点:

 function eventHandler(e, a, b, c, d){}
     

e仍在引用该事件,还是d

这取决于您如何绑定事件处理程序。如果您只是分配它,它将是e。如果您已将其他值绑定到参数,例如通过.bind,它将是第一个未绑定的参数。但是,这与事件处理程序没有任何关系。事件处理程序本身也将事件对象作为第一个参数。

  

要完成上述工作,您需要明确使用关键字event

event不是关键字。您可以根据需要为参数命名。

  

在JavaScript中的函数中声明事件参数时有哪些经验法则?

没有。您的事件处理程序没有神奇的静态检查。它只是一个接受论证的函数,就是它。

但是,肯定有约定来命名参数eevent,因为它是表示事件对象的变量的合理名称

答案 1 :(得分:0)

我个人认为没有这方面的规则,但是伟大的Nicholas Zakas在他的书 Maintainable JavaScript 中说,如果你想要一个易于测试和维护的功能,您永远不必按如下方式声明事件:

function myFunction(event) {}

相反,您必须声明函数所需的参数:

function myFunction(clientX, clientY) {}

当你调用函数时,你必须传递来自object事件的参数:

// This won't work on IE8 and older versions.
element.addEventListener('click', function(event) {
    myFunction(event.clientX, event.clientY);
}, false);

当您或您团队中的其他人必须测试此功能时,他/她不需要模拟任何事件。