2011-08-02 3 views
6

JSLint를 통해 스크립트를 실행했으며 괄호 배치가있는 특정 문제를 선택했습니다.클로저는 어떻게 포맷해야합니까?

은 내가 쓴 :

(function(){})(); 

그리고 그것은 사용하도록 제안했다 :

(function(){}()); 

나는 궁금 AS에 어떤 버그 나 문제점이 특정 변경 수정. 나는 JSLint가 문제로 골랐기 때문에 이 누군가에게 문제가되어야한다고 생각합니다.

확장 된 형태 : 그것은 순수한 스타일입니다 http://www.yuiblog.com/crockford/에 크록 포드에 따르면

(
    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(){ 
    ... 
}); 

완벽하게 유효 BargA 전달됩니다. 그러나 이것은 흔히 의도 된 경우가 아니며 자주 실행되기 때문에 의미가 없으며 후행 ()은 잊어 버렸습니다. 제안 된 구문은 실수로 의도 한대로 함수를 실행하는 것을 잊어 버린 혼동을 제거합니다.

가치있는 점은 거의 항상 첫 번째 구문도 사용한다는 것입니다. 습관.

0

(비디오 기억할 수는 없지만, 내가 처음으로 생각) 읽기 쉽도록 도와 주며 버그 또는 문제와 관련이 없습니다.

편집 :

나는 그것이 법 III에 생각 : 최고의가