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 匿名函数的主要内容,如果未能解决你的问题,请参考以下文章