2010-10-04 145 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);