Javascript 函数jQuery:自定义事件还是函数?

Javascript 函数jQuery:自定义事件还是函数?,javascript,jquery,events,functional-programming,Javascript,Jquery,Events,Functional Programming,作为函数式编程的新手,我正在研究我的应用程序的javascript(专门使用jQuery),并想知道jQuery的事件系统与它的函数式编程范式有何关联 我有一个函数setupAccountHeader,它可以很容易地成为文档绑定事件,比如 $(document).bind('setupAccountHeader', function() { blah, blah, blah; }); 或 然后,在需要时触发或调用 所以我有两个问题: 1) 功能性jQuery更喜欢哪种风格,或者这纯粹是

作为函数式编程的新手,我正在研究我的应用程序的javascript(专门使用jQuery),并想知道jQuery的事件系统与它的函数式编程范式有何关联

我有一个函数setupAccountHeader,它可以很容易地成为文档绑定事件,比如

$(document).bind('setupAccountHeader', function() {
    blah, blah, blah;
});

然后,在需要时触发或调用

所以我有两个问题:

1) 功能性jQuery更喜欢哪种风格,或者这纯粹是一种品味/个人风格的问题?那么,对整体架构的影响呢

2) 对于功能样式的jQuery,有什么好的资源吗?我觉得这是John Resig的意图,但我找不到关于这在实施中意味着什么的信息或指南。

  • jQuery中绑定事件的官方方法是第一个版本,这样您就有了绑定和解除绑定事件的类似方法。我认为这不是个人的偏好,因为它有助于代码的可读性,获得对代码的支持,并使用jQuery中包含的其他相关函数,如防止默认事件冒泡。第一个问题的第二个示例在JavaScript中是正确的,但是jQuery文档中没有使用这种样式
更新

如果您想绑定事件并使用a的优点,您将使用第一个版本进行常规(模糊、聚焦、加载、调整大小、滚动、卸载、预卸载、单击、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、更改、选择、提交、按键、按键、向上键、错误)或自定义事件

它们其实并不相似。为了与第二个类似,您必须将一些事件附加到文档中。试着取消它们以获得想法

另一个版本只是一个闭包,可以在JavaScript中随处使用,在本例中也可以使用。没有上下文,它没有任何特定的含义

  • 我不太明白第二个问题。也许你可以详细说明你的意思。我不是以英语为母语的人

第二种样式的优点是,它将在调试器调用堆栈中以其名称显示,而不是“匿名”,我觉得这更有帮助

您可以通过以下方式实现上述功能以及jQuery添加的事件机制(正如Elzo所说):

$(document).bind('setupAccountHeader', setupAccountHeader);

很有趣,但并没有真正回答他的问题。事实上,这一点都不有趣。@Robert Harvey这个评论没有多大帮助,不是吗?我不会这么说的。你改进了你的答案,不是吗+1正式jQuery文档通常有非常简单的示例。我了解jQuery的官方用法,但我所做的并不一定是一件大事,我想探讨函数式编程如何影响jQuery应用程序的设计。我的问题更多的是关于某些逻辑/过程/代码属于何处,关于如何从功能上处理jQuery,以及如何尝试在该范例中编写。解决这个问题的一个简单方法是使用:
$(document).bind('setupAccountHeader',function setupAccountHeader(){…})+1嘿。。。检查年份,但仍然是一个好的点。。。在这种情况下可能无关紧要,但如果事件处理程序要被多个对象(尤其是大量对象)重用,那么答案中的方法应该用于提高效率——但我喜欢这样一个事实,即如果它只是一个简单的处理程序,那么您可以充分利用这两种方法。
// first version
$(document).unbind('setupAccountHeader'); // will cancel the binding of some action
// second version
setupAccountHeader = null; // will just cancel a variable 
$(document).bind('setupAccountHeader', setupAccountHeader);