命名匿名函数

Ray*_*nos 21 javascript debugging anonymous-types

有可能以某种方式为匿名函数设置名称吗?

没有必要为匿名函数添加函数名称到命名空间,但我想避免在我的javascript调试器中看到大量(?),这样我就可以保持调用堆栈跟踪信息.

我也可以安全地将正常声明的函数作为参数而不是匿名函数传递,或者我会遇到一些奇怪的错误.它似乎工作.

$("object").bind("click", function() { alert("x"); });

$("object").bind("click", function debuggingName() { alert("x"); });
Run Code Online (Sandbox Code Playgroud)

[编辑]

我的意思是喜欢的东西

$("object").bind("click", function() { Function.Name = "debuggingName"; alert("x"); });
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 20

你的第二个例子是使用一个命名函数表达式,它在大多数浏览器中都能正常工作,但在使用它之前你应该注意IE中的一些问题.我建议阅读kangax关于这个主题的优秀文章.


Jac*_*eam 5

您可以使用箭头函数执行类似的操作,它在 Node.js 上适用于我。

const createTask = ([name, type = 'default']) => {
  const fn = () => { ... }

  Object.defineProperty(fn, 'name', {
    value: name,
    configurable: true,
  })

  return fn
}
Run Code Online (Sandbox Code Playgroud)

MDN 这里有点误导:

您无法更改函数的名称,该属性是只读的...

要更改它,您可以使用Object.defineProperty()

这个答案提供了更多细节。