2010-05-21 205 views
3

我已經開始更多地使用Javascript了,因此我寫的東西已經足夠複雜,組織正在成爲一個關注點。但是,這個問題適用於允許您嵌套函數的任何語言。從本質上講,什麼時候應該使用一個名爲全局或內部函數的匿名函數?使用匿名函數的最乾淨的方法是什麼?

起初我以爲這是有史以來最酷的功能,但我認爲我會過度。下面是我最近寫的一個例子,省略了所有變量的排列和條件,以便您可以看到結構。

function printStream() { 
    return fold(function (elem, acc) { 
    ... 
    var comments = (function() { 
     return fold(function (comment, out) { 
     ... 
     return out + ...; 
     }, '', elem.comments); 
    return acc + ... + comments; 
    }, '', data.stream); 
} 

我雖然意識到(我認爲)有某種美的在如此緊湊,它可能不是一個好主意,你不會想在一噸的代碼相同的方式做到這一點雙重循環。

回答

1

像任何工具一樣,這取決於。你不應該總是使用它,也不應該永遠不會使用它。你應該在適當的地方使用它。

你應該使用它們,它是一個簡單的2線或3線,並且沒有應用程序在其他地方使用它。

您應該在JavaScript中使用它,您可以在此處獲得閉包以隔離交易中的變量。最重要的是,只要其他開發人員可以查看代碼並「得到它」,那就很好。當我看上面的代碼示例時,我做了而不是「明白了。」

+0

如果你是一個單獨的開發者,那麼「得到它」測試是困難的。很難判斷你以後是否會在重訪時感到困難。我認爲你的2-3線經驗法則可能是我會堅持的一個很好的經驗法則。我想我可以避免完全嵌套的誘惑。 – 2010-05-21 17:28:43

1

匿名函數的乾淨程度取決於他們在做什麼以及他們的時間。

我傾向於做的只是儘可能地使用簡單的匿名函數,當調用的函數很長/複雜時調用外部定義的函數(定義在代碼塊之外或其他文件中)而不是將其內聯到匿名函數中。

這會使代碼在功能很長的情況下更清晰易讀。 如果功能在多個地方使用,它也變得更加有用 - 否則只要使用它的功能就會被複制

1

我認爲這取決於您的目標和您的應用程序。 你必須考慮代碼的可重用性和可維護性。

如果您永遠不想再次使用匿名函數 - 像您習慣的那樣使用它,但是如果您想要tu重用您的代碼,請將其作爲全局函數。

如果函數調用不是匿名的,那麼可維護性更容易提供。

調試有時也更容易(錯誤消息:函數中的錯誤{}沒有多大幫助)。

相關問題