在事件处理程序上使用闭包是一个好主意吗?

时间:2014-02-24 18:46:36

标签: javascript javascript-events closures

我需要生成很多事件处理程序并为每个事件提供一组变量,到目前为止我一直在使用闭包(用我需要的变量声明闭包内的处理函数),有没有更好的这样做的方式?

抱歉,问题太模糊了,这是我试图做的一个演示

$(id).click(getFunction(¨hi¨))

function getFunction(msg){
  return function a(){  
    alert(msg);    
  }

}

1 个答案:

答案 0 :(得分:1)

关闭没什么问题(除了IE旧版本的评论中提到的),但是如果你关心包含处理程序的许多元素以及带有自己的数据副本的处理程序的内存,那么你可以考虑添加更高的共享元素。

在JavaScript中,事件会“冒泡”DOM,因此您可以在单个祖先元素上添加侦听器,在共享处理程序中注意根据您的需要进行过滤,以避免在共享后代上允许其他事件也要错误地处理祖先(例如,你可以确认事件目标元素有一个合适的类)。

因此,您可以检测HTML元素元数据(即data-*class等属性)来决定在处理程序中执行的操作,而不是依赖于特定于元素的事件闭包变量。

但这实际上取决于你特别想要做的事情。