有没有可能以某种方式为匿名函数设置一个名称?
对于匿名函数,不需要将函数名添加到命名空间中,但我希望避免在我的javascript调试器中看到大量的(?),这样我就可以保持调用堆栈跟踪信息。
我还能安全地传递普通的声明函数作为参数而不是匿名函数吗?或者我会不会走进一些奇怪的错误。它似乎起作用了。
$("object").bind("click", function() { alert("x"); });
$("object").bind("click", function debuggingName() { alert("x"); });
[编辑]
我指的沿着像
$("object").bind("click", function() { Function.Name = "debuggingName"; alert("x"); });
6条答案
按热度按时间f1tvaqid1#
第二个例子是使用一个 named function expression,它在大多数浏览器中都能正常工作,但在IE中有一些问题,在使用它之前应该注意。
k5hmc34c2#
你可以用箭头函数来做类似的事情,它对我在Node上很有效。
MDN在这里有些误导:
您不能更改函数的名称,此属性是只读的...
要更改它,* 您可以使用**Object.defineProperty()**通过 *。
This answer provides more details.
uurity8g3#
使用ECMAScript2015(ES2015,ES6)语言规范,可以不使用缓慢且不安全的 eval 函数,也不使用 Object.defineProperty 方法,这两种方法都会损坏函数对象,并且在某些关键方面无法工作。
例如,请参见
nameAndSelfBind
函数,它既可以命名匿名函数,也可以重命名命名函数,还可以将它们自己的函数体绑定为 this,并存储对要在外部作用域(JSFiddle)中使用的已处理函数的引用:4ioopgfo4#
我通常会这样做:$(“对象”).bind(“单击”,函数名(){ alert(“x”);});
别出什么问题。
一些主要图书馆鼓励这样做:
https://groups.google.com/forum/m/#!topic/firebug/MgnlqZ1bzX8
http://blog.getfirebug.com/2011/04/28/naming-anonymous-javascript-functions/
2o7dmzc55#
如果dynamic函数名是问题.可以尝试以下操作:
来源:Nate Ferrero
tp5buhyn6#
匿名函数是一个没有名字的函数,它从定义它的地方执行。或者,你可以在使用它之前定义调试函数。