javascript - 匿名函数被认为是有害的?

标签 javascript language-design anonymous-function

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


3年前关闭。







Improve this question




我对 javascript 的深入研究越多,我就越会考虑某些设计决策和鼓励实践的后果。在这种情况下,我正在观察匿名函数,这个特性不仅是 JavaScript 提供的,而且我看到它被广泛使用。

我想我们都可以同意以下事实:

  • 人脑处理的实体不超过 7 加减两个 (Miller's law)
  • 深压痕被认为是 bad programming practice ,并且如果缩进超过三个或四个级别,通常会指出设计问题。这扩展到嵌套实体,它在 python Zen 条目“Flat is better than nested”中得到了很好的呈现。
  • 有一个函数名的想法既是为了引用,也是为了便于记录它所执行的任务。我们知道或者可以期待一个名为 removeListEntry() 的函数的作用。自记录、清晰的代码对于调试和可读性很重要。

  • 虽然匿名函数似乎是一个非常好的特性,但它的使用导致了深度嵌套的代码设计。代码写得很快,但读起来很困难。与其被迫为功能发明一个命名上下文,并扁平化你的可调用对象层次结构,它鼓励“深入一层”,插入你的大脑堆栈并迅速溢出 7 +/- 2 规则。 Alan Cooper 的“About Face”中表达了类似的概念,粗略地引用了“人们不了解层次结构”。作为程序员,我们确实了解层次结构,但我们的生物学仍然限制了我们对深层嵌套的理解。

    在这一点上,我想听听你的意见。匿名函数是否应该被认为是有害的,一种明显 Shiny 的语法糖,我们后来发现它是盐,甚至是老鼠药?

    CW,因为没有正确的答案。

    最佳答案

    在我看来,您面临的问题不是匿名函数,而是不愿意将功能分解为有用且可重用的单元。这很有趣,因为在具有一流函数(以及必然是匿名函数)的语言中重用功能比在没有一流函数的语言中更容易。

    如果您在代码中看到很多深度嵌套的匿名函数,我建议可能有很多通用功能可以分解为命名的高阶函数(即接受或返回(“构建”)其他函数的函数功能)。如果经常使用它们,即使是现有函数的“简单”转换也应该命名。这只是 DRY 原则。

    关于javascript - 匿名函数被认为是有害的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960517/

    相关文章:

    javascript - 在另一个函数中调用匿名函数而不调用父函数

    带参数的 JavaScript 和 C++ 回调函数

    javascript - Angularjs $http VS jquery $.ajax

    javascript - 如何理解这个 Node.js 代码片段?

    c# - 为什么 ref 参数类型与常规类型不同?

    javascript - detachEvent 不适用于命名的内联函数

    javascript - 限制用户调整浏览器窗口的大小

    .net - .NET 中的只读/常量在哪里?

    programming-languages - 在语言中不包含 NULL 的含义?

    JavaScript : RemoveEventListener with Anonym Function