2010-10-04 148 views
17

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

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

也可以安全地传递正常的声明函数作为参数,而不是匿名函数,否则我会走入一些奇怪的错误。它似乎工作。

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

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

[编辑]

我意味着什么沿着

$("object").bind("click", function() { Function.Name = "debuggingName"; alert("x"); }); 
+4

@Raynos内特费雷罗 - 一个名为匿名函数是一种自相矛盾的说法!!:你可以试试这个:

function renameFunction(name, fn) { return (new Function("return function (call) { return function " + name + "() { return call(this, arguments) }; };")())(Function.apply.bind(fn)); } renameFunction('dynamicName',function() { debugger })(); 

源 – InSane 2010-10-04 10:00:31

+0

当你使用上面的第二个构造时,是否会出现一些错误? – 2010-10-04 10:00:52

+0

我只是想设置一个匿名函数中的东西,调试器可以拿起并显示为一个有用的调试函数名称。我想完全按照我使用匿名函数的方式来使用它们。 – Raynos 2010-10-04 10:27:54

回答

17

你的第二个例子是使用命名的函数表达式,这适用于大多数的浏览器不错,但在IE浏览器的一些问题,你应该知道使用它之前。我推荐阅读kangax's excellent article on this subject。 。

+0

谢谢,我担心传递一个命名的函数表达式可能会导致错误。 – Raynos 2010-10-04 10:23:32

+0

哦,这是一篇可爱的文章。我没有注意到在命名函数表达式和函数声明之间存在有效的区别。 – Raynos 2010-10-04 10:30:12

+0

是的,我只是写了一条评论指出:) – 2010-10-04 10:31:14

-3

喜欢匿名函数是没有名字的功能,它是从它的定义在那里执行。或者,您可以在使用它之前定义调试功能。

function debuggingName() { 
    alert("x"); 
} 

$("object").bind("click", debuggingName);