命名和未命名匿名Javascript函数之间的差异

Ala*_*orm 11 javascript closures anonymous-function node.js function-expression

通常,在Javascript中,当我想将匿名/内联函数作为参数传递给另一个函数时,请执行以下操作之一。

someFunctionCall(function() {
    //...
});

someFunctionCall( () => {
    //...
});
Run Code Online (Sandbox Code Playgroud)

但是,我最近继承了一个使用命名函数作为内联参数的代码库,如下所示

someFunctionCall(function foo() {
    //...
});
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这种语法。该函数似乎仍然是匿名的- foo在调用范围或被调用范围中都没有定义函数。这仅仅是样式问题,还是可以使用命名函数(foo上述)作为匿名函数来更改该程序的行为或状态?

这是专门针对NodeJS(不是基于浏览器的程序)程序的,并且我对使用函数作为参数的特定行为特别感兴趣。也就是说,欢迎跨平台和运行时提供来自行为的信息。

Sus*_* -- 8

使用命名函数表达式而不是匿名函数表达式至少具有三个优点。

  • 由于函数名称显示在调用层次结构中,因此使调试更加容易。
  • 在函数的内部范围中可以访问函数名称,因此可以将其用于递归
  • 函数名称本身就像函数执行的自我文档一样,而不是阅读代码。