【问题标题】:Is it a good idea to use closures on an event handler?在事件处理程序上使用闭包是个好主意吗?
【发布时间】:2014-02-24 18:46:36
【问题描述】:

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

对不起,这个问题太模糊了,这是我正在尝试做的演示:

$(id).click(getFunction(¨hi¨))
    
function getFunction(msg){
  return function a(){  
    alert(msg);    
  }

}

【问题讨论】:

  • 最佳方式取决于具体情况,在某种程度上取决于个人喜好。不能说你在做什么。不过,旧版 IE 中可能存在内存泄漏问题。
  • 您能否提供更多详细信息,或者简单演示一下您说“这个”时的设想?这有点模糊,很难回答。
  • 那是 jQuery 吗?如果是这样,那么您应该说明您是否需要特定于 jQuery 的解决方案,或者您是否只对纯 JavaScript 解决方案感兴趣。

标签: javascript closures jquery-events


【解决方案1】:

闭包没有什么问题(除了在旧版本 IE 的 cmets 中提到的),但如果您出于记忆的原因担心包含处理程序的许多元素以及具有自己的数据副本的处理程序,那么您可以考虑添加到更高的共享元素上。

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

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

但这真的取决于你具体想做什么。

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 2013-04-01
    • 1970-01-01
    • 2011-06-01
    • 2010-09-26
    • 2012-04-27
    • 2015-12-04
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多