匿名函数在JavaScript中是不好的做法吗?

ste*_*bot 25 javascript anonymous-function

我在阅读使用javascript中的匿名函数是不好的做法,因为它可以使调试变得痛苦,但我还没有看到这个.JavaScript中的匿名函数是否真的很糟糕,如果是这样,为什么?

kem*_*002 12

不,匿名函数在整个网络上的JavaScript中使用.它可能会使调试变得更加困难,但不足以说它们不应该被使用.

例如,JQuery广泛使用它们.

有很多时候你想在正式声明的函数上使用它们,例如当你想限制它们的范围时.

  • 实际上,这是我停止使用jQuery的一个原因.它总是花费比我认为合理的时间更长的时间来确定错误是否是我的代码中的语法错误,代码中的逻辑错误或jQuery本身的错误.你不得不承认,一个匿名函数的调用堆栈并不像一个命名函数那样令人非常清楚. (7认同)
  • 您始终可以使用[命名函数表达式](http://yura.thinkweb2.com/named-function-expressions/#named-expr). (6认同)

bhs*_*cer 12

我将在这里反对流程,并说明匿名函数确实是不好的做法,即使它们被广泛使用.

1)匿名函数不能重用.

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

3)无法使用单元测试框架单独测试匿名函数.

4)我个人认为他们使代码更难以阅读和调试.虽然您的经历可能有所不同

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

  • 1)匿名功能和盖可被重新使用,每个函数是值,可以被分配给一个变量或作为函数参数提供 - 它仅仅是一个曝光功能对象,例如在合适的水平/范围的问题; 2)匿名函数(或函数表达式)_can_可以给出明确的名称,但在上下文中是"匿名的"; 3)取决于测试内容,测试方式以及功能对象如何暴露; 4)瓶盖/ lambda表达式_can_在"太聪明"的情况下被滥用,但_terrible编码器是可怕的coders_,即使是最琐碎的程序代码语句.. (2认同)
  • 我不同意.在您的示例中,传递给名为forEach的函数的函数没有名称. (2认同)

med*_*iev 7

我会说相反,lambdas(别名)使一些表达更加简洁.如果您将多个事件处理程序绑定到多个事件,那么为每个事件处理程序提供一个函数名称会非常繁琐.

它比没有更有帮助和节省时间,即使它使调试变得有点困难但我很少调试,因为函数是匿名的.并且您应该使用JSLint在编码时让您的生活更轻松.


Jac*_*kin 5

绝对不是,lambda函数遍布整个地方,几乎无处不在.

  • 只是因为某些东西是_common_并不意味着它是_correct_.使用匿名函数可能没有错,但是说"每个人都这样做"并不构成有效的论证. (20认同)

pal*_*wim 5

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

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

  • 您始终可以使用[命名函数表达式](http://yura.thinkweb2.com/named-function-expressions/#named-expr)。 (3认同)