2016-02-19 71 views
1

这是写在MDN事件监听匿名函数

如果你想传递参数给听者功能,您可以使用匿名函数。

一些试验,我想通了,当我尝试注册这样的一个参数功能的事件监听器(没有匿名函数)

target.addEventListener(type, doSomething(parameter)); 

监听功能即使在事件没执行后不会发生,但是当我用匿名函数包装它时

target.addEventListener(type, function() {doSomething(parameter);}); 

一切都按预期进行。

为什么会发生这种行为?我想这与关闭有关。

+1

在第一种情况下,您执行该函数并将结果作为事件处理程序传递。在第二种情况下,匿名函数不会执行,而只是作为参考传递。 – Sirko

回答

1

当定义,像这样

target.addEventListener(type, doSomething(parameter)); 

你传递函数的返回值处理程序处理函数。例如,考虑这样的功能:现在

function doSomething(event) { 
    return 'foo'; 
} 

,该功能被立刻执行,该事件已经发生之前,你基本上只是路过这是处理程序:

target.addEventListener(type, 'foo'); 

这是行不通的。

第二个例子

target.addEventListener(type, function() {doSomething(parameter);}); 

正确传递函数作为参考,而无需发生事件之前执行。

+1

我认为'doSomething.bind(this,parameter)'也可以。 – Andy

+0

这也会起作用@Andy – baao