2011-08-02 24 views
6

我通過JSLint運行了一個腳本,它找出了括號放置的具體問題。應該如何格式化閉包?

我曾寫過:

(function(){})(); 

,並建議使用:

(function(){}()); 

我很好奇,什麼樣的錯誤或問題,這個特別的變動修正。我會假設因爲JSLint挑出它作爲一個問題,必須是一個問題的人。

擴展形式:

(
    function (p) { 
    ...code... 
    } 
)(param); //parameters after the parens 

航班嗎

(
    function (p) { 
    ...code... 
    }(param) //parameters within the parens 
); 
+2

http://stackoverflow.com/questions/5938802/are-function-and-function-functionally-equal-in/5938845#5938845 – SLaks

+0

@zzzzBov哇,你顯然沒有讀任何東西過去的第一句話回答SLaks鏈接到。它包含了精確回答您的問題的兩種語法之間差異的非常詳細的分解。 –

回答

5

JSLint的是試圖解決的具體問題涉及到缺乏關閉;的這可能會導致一個錯誤,其中一個功能被解釋爲一個參數:

(function A(arg){ 
    // stuff 
}) 

(function B(){ 
    ... 
}); 

是完全有效,B傳遞給Aarg。然而,這往往不是預期的情況,因爲這些往往意味着自我執行,並且尾隨的()被遺忘。建議的語法消除了您可能意外忘記按預期執行功能的任何混淆。

對於它的價值,我幾乎總是使用第一種語法;習慣。

0

據克羅克福德上http://www.yuiblog.com/crockford/(不記得哪一個視頻,但我認爲這是朝着開頭)它是純粹的風格來幫助它更容易閱讀並且與錯誤或問題無關。

編輯:

我認爲這是在第三幕:功能終極

相關問題