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