匿名函数在JavaScript中是一个坏习惯吗?

Are anonymous functions a bad practice in JavaScript?

我读到在javascript中使用匿名函数是一种糟糕的实践,因为它会让调试变得很痛苦,但我自己还没有看到这一点。javascript中的匿名函数真的是糟糕的做法吗?如果是,为什么?


不,匿名函数在Web上的javascript中被广泛使用。这可能会使调试变得更加困难,但还不足以说明不应该使用它们。

例如,jquery广泛使用它们。

有很多时候,您希望在正式声明的函数上使用它们,例如当您希望限制它们的作用域时。


我将在这里稍微反对一下这个流程,并指出匿名函数实际上是一种不好的实践,尽管它们被广泛使用。

1)匿名函数不能重用。

2)根据定义,匿名函数没有名称,因此不描述它们的作用。也就是说代码不是自记录的。

3)匿名函数不能单独使用单元测试框架进行测试。

4)我个人认为它们使代码更难阅读和调试。尽管你的经验可能有所不同。

我认为在某些情况下,匿名函数是最好的选择,而且作为一般规则,为了避免上述缺点,我几乎总是给函数命名。


相反,lambdas(别名)使一些表达式更简洁。例如,如果您将多个事件处理程序绑定到多个事件,那么为每个事件处理程序提供一个函数名就很麻烦了。

它比没有更有用,更节省时间,即使它使调试有点困难,但我很少在调试中挣扎,因为函数是匿名的。在编码时,您应该使用jslint来简化您的生活。


最肯定的是,lambda函数被广泛使用,几乎无所不在。


仅仅因为每个人都使用它们并不能使它们成为良好的实践(每个人都记得使用table元素进行布局吗?)但是,它们很好,因为它们可以帮助您澄清和简化代码,减少出错的机会。

但是,匿名函数不应该如此复杂,以至于调试变得困难。在这种情况下,也许最好创建一个新的函数。


这是我的浏览器控制台:

1
2
3
4
5
6
7
8
9
10
11
// Bad
poopy = function(){}
// function (){}
groupy = poopy;
// function (){}

// Good
droopy = function loopy(){};
// function loopy(){}
floupy = droopy;
// function loopy(){}

假设您正在调试一些东西,并且您有一个名为groupy的函数名。你输入它的名字来获得更多的信息。如果该函数被设置为坏的部分,那么您不知道原始声明是什么。但是,如果像good部分那样定义函数名,那么您将始终跟踪原始函数名。


匿名函数表达式是JavaScript中的最佳实践。