2011-02-07 197 views
1

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

这是不是最好的(右)的方式来做事:

 
$(document).ready(function() { 
    $('#magic').click(function(e) { 
     $('#yayeffects').slideUp(function() { 
      // ... 
     }); 
    }); 

    $('#happiness').load(url + ' #unicorns', function() { 
     // ... 
    }); 
}); 

其更:

 
var PI = { 
    onReady : function() { 
     $('#magic').click(PI.candyMtn); 
     $('#happiness').load(PI.url + ' #unicorns', PI.unicornCb); 
    }, 
    candyMtn : function(e) { 
     $('#yayeffects').slideUp(PI.slideCb); 
    }, 
    slideCb : function() { ... }, 
    unicornCb : function() { ... } 
}; 

$(document).ready(PI.onReady); 

是否一个比下有更好的表现?更容易调试?

想法?注释?

+3

几件事:(1)这句话的意思是说“B比A好。你怎么看?”加载问题。 (2)你没有说出为什么你觉得第二个更好,尽管说是这样。 – 2011-02-07 13:39:18

回答

0

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

1

如果你有一个有很多匿名函数的栈跟踪,需要花费更多的时间来找出错误发生的位置以及错误发生的位置。所以加1秒。

事件处理程序中的代码通常与处理程序获取注册的代码无关,因此应该位于单独的函数/模块中。加1秒。

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

将相关函数放入单个对象不一定是最好的。如果对不同的dom对象使用侦听器的行为,onReady函数通常很糟糕。

不关心性能。一个听众通常不会经常被称为重要的事情。如果是这样,那么其他地方很可能出现问题。