JavaScript 匿名函数

Posted

技术标签:

【中文标题】JavaScript 匿名函数【英文标题】:JavaScript Anonymous Functions 【发布时间】:2011-02-07 13:32:54 【问题描述】:

我这个周末在网上阅读了以下内容,我想知道大多数其他人是否认为这是正确(更好)的做事方式。

这不是最好的(正确的)做事方式:

$(文档).ready(函数() $('#magic').click(function(e) $('#yayeffects').slideUp(function() // ... ); ); $('#happiness').load(url + '#unicorns', function() // ... ); );

这样更好:

变种 PI = 准备就绪:函数() $('#magic').click(PI.candyMtn); $('#happiness').load(PI.url + '#unicorns', PI.unicornCb); , candyMtn:函数(e) $('#yayeffects').slideUp(PI.slideCb); , slideCb:函数()..., 独角兽Cb:函数()... ; $(文档).ready(PI.onReady);

一个比另一个表现更好吗?更容易调试?

想法?评论?

【问题讨论】:

几件事:(1) 这句话的意思是“B 比 A 好。你怎么看?”这会加载问题。 (2) 你没有说明为什么你觉得第二个更好,尽管说是这样。 仅供参考,但在 jQuery 的更高版本中,$(function()...) 等同于 $(document).ready(function()...) 【参考方案1】:

如果您有一个包含大量匿名函数的堆栈跟踪,则需要花费更多时间来找出错误到底发生在哪里以及从哪里调用。所以加 1 秒。

事件处理程序中的代码通常与注册处理程序的代码没有太大关系,因此应该在单独的函数/模块中。加 1 秒。

对侦听器使用匿名函数也很糟糕,因为如果您必须删除此侦听器(大多数人并不关心),您可以只删除它们,而不必担心意外地从其他侦听器中删除其他侦听器部分代码。第二个加 1。

把相关的功能放到一个单独的对象中不一定是最好的。如果您将侦听器的行为用于不同的 dom 对象,则大多数情况下 onReady 函数是不好的。

不关心性能。通常不会经常调用侦听器,因为它很重要。如果确实如此,则很可能是其他地方存在问题。

【讨论】:

【参考方案2】:

第二个变体是可重用的 - 您可以重用 slideCb 和其他处理程序用于其他控件的其他事件。

【讨论】:

以上是关于JavaScript 匿名函数的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的匿名函数立即执行函数和闭包

javascript匿名函数与闭包

JavaScript 函数

详谈JavaScript 匿名函数及闭包

Javascript的匿名函数与自执行

Javascript的匿名函数与自执行