我是 JavaScript 新手。我了解该语言的许多概念,我一直在阅读原型继承模型,并且我正在用越来越多的交互式前端内容来磨练我的口哨。这是一种有趣的语言,但我总是对许多非平凡交互模型的典型回调意大利面有点反感。
我一直觉得很奇怪的是,尽管 JavaScript 嵌套回调嵌套是可读性的噩梦,但我在许多示例和教程中很少看到的一件事是使用预定义的命名函数作为回调参数。白天,我是一名 Java 程序员,摒弃了关于代码单元的 Enterprise-y 名称的刻板印象,我开始喜欢使用具有大量功能性 IDE 的语言工作的一件事是使用有意义的,如果很长,名称可以使代码的意图和含义更加清晰,而不会增加实际工作效率。那么为什么在编写 JavaScript 代码时不使用相同的方法呢?
仔细想想,我可以提出支持和反对这个想法的论点,但是我对语言的天真和新奇使我无法得出任何关于为什么这在技术层面上会很好的结论。
优点:
- 灵活性。具有回调参数的异步函数可以通过许多不同的代码路径之一访问,并且必须编写命名函数来解释每个可能的边缘情况可能会很麻烦。
- 速度。它在很大程度上影响了黑客的心态。把东西固定在上面,直到它起作用为止。
- 其他人都在做
- 较小的文件大小,即使是微不足道的,但每一点都对网络很重要。
- 更简单的 AST?我假设匿名函数是在运行时生成的,因此 JIT 不会将名称映射到指令,但我现在只是猜测。
- 发货更快?也不确定这个。又猜了。
缺点:
- 这是可怕的和不可读的
- 当您在回调沼泽深处嵌套疯狂时,它会增加混乱(公平地说,这可能意味着您开始编写结构不佳的代码,但这很常见)。
- 对于没有功能背景的人来说,理解它可能是一个奇怪的概念
有这么多现代浏览器显示出比以前更快地执行 JavaScript 代码的能力,我看不出使用匿名回调来获得任何微不足道的性能提升是多么必要。似乎,如果您处于使用命名函数可行的情况(可预测的行为和执行路径),那么就没有理由不这样做。
那么是否有任何我不知道的技术原因或陷阱使这种做法如此普遍是有原因的?