Ant*_*eev 3 javascript dom asp.net-web-api
它写在MDN上
如果要将参数传递给侦听器函数,则可以使用匿名函数。
经过一些实验,我发现了当我尝试使用这样的单参数函数(没有匿名函数)注册事件侦听器时
target.addEventListener(type, doSomething(parameter));
Run Code Online (Sandbox Code Playgroud)
即使没有发生事件,侦听器函数也会执行,但是当我将其包装到匿名函数中时
target.addEventListener(type, function () {doSomething(parameter);});
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行。
为什么会发生这种行为?我猜想它与闭包有某种联系。
像这样定义处理程序函数时
target.addEventListener(type, doSomething(parameter));
Run Code Online (Sandbox Code Playgroud)
您正在传递函数的返回值作为处理程序。例如,考虑以下功能:
function doSomething(event) {
return 'foo';
}
Run Code Online (Sandbox Code Playgroud)
现在,该函数在事件发生之前立即执行,您基本上只是将其作为处理程序传递:
target.addEventListener(type, 'foo');
Run Code Online (Sandbox Code Playgroud)
那行不通。
第二个例子
target.addEventListener(type, function () {doSomething(parameter);});
Run Code Online (Sandbox Code Playgroud)
正确传递一个函数作为参考,而不必在事件发生之前执行它。
| 归档时间: |
|
| 查看次数: |
5521 次 |
| 最近记录: |