开发 JavaScript 库时应该使用命名函数吗?

Should you use named functions when developing a JavaScript library?

例如:

module.exports = {
  myLibraryFunction: function myLibraryFunction() {
    ...
  }
}

缺点很明显。它不是很 DRY,这意味着如果您不小心,它很容易变得不同步。它还会使您的代码更加冗长。

那么有什么优势呢?这种权衡值得吗?

我在编写 JS 库时使用这种方法。最大的优势是,像 Chrome 调试器这样的工具将为您的函数指定一个明确的名称,而不是 "anonymous" 或由函数路径组成的基于包含函数的变量名称的名称。但是,如果您在调试时不关心方法名称,那么它真的归结为一个品味问题。如果你要缩小生成的 JS 代码,这样的命名元素无论如何都会被删除。

至于这种方法的 DRY 程度,请考虑重复的名称彼此紧挨着出现。只需快速复制和粘贴即可使它们保持同步。如果 JS 包含一个功能,该功能会根据在创建时分配给它的变量来命名函数(或者至少能够动态重新分配函数名称),那就太好了。然而遗憾的是,这是 JS 允许我们命名这些匿名函数的唯一方式。