2011-10-14 16 views
3

나는이 패턴을 자바 스크립트 파일을 많이 봤어요 : 즉시 함수에서이 코드를 실행하는 것과 다른 점은 무엇입니까?

(function ($) 
{ 
    //Perform operation X 
}(jQuery)); 

는 다음을 대 JS 파일에 위의 코드를 배치 사이에 차이가 있습니다 :

function myFunc($) 
{ 
    //Perform operation X 
} 
myFunc(jQuery); 

이 아니면 단순히 더 간결한?

+0

"표준"JS 코딩 규칙을 배우려면 http://www.jslint.com을 적극 권장합니다. –

+0

그래, 나는 최근에 그것에 대해 알았다. 멋지다. 내 JS 지식의 차이가 천천히 작성하고 있습니다 :) –

+0

JSLint가 코드를 찢어 버리고 모두 잘못되었음을 알게되면 꽤 심해질 수 있습니다. 그러나 그걸 고수하십시오. :) –

답변

5

두 번째 발췌 문장은 공개 심볼 myFunc을 정의합니다. 다른 사람이 해당 심볼을 라이브러리에 사용하고 있다면, 심볼을 덮어 쓰고 해당 심볼의 기능을 파괴 할 수 있습니다. 첫 번째 스 니펫에는 이름이 없으므로 더 안전합니다.

+0

Ahh, 알 수 있습니다. 고맙습니다. –

+0

... 익명 함수의 경이 ... 그리고 자바 스크립트 – Rafael

2

전자가 후자에 비해 유일한 이점은 변수 이름 (myFunc)으로 범위를 오염시키지 않는다는 것입니다.

e.e. 두 번째 예에서 동일한 범위에있는 변수가 이미 myFunc 인 경우 해당 값이 함수에 의해 덮어 쓰여집니다. 첫 번째 예에서와 같이이 경우는 그렇지 않습니다.

두 번째 예에서는 분명히 myFunc을 여러 번 호출 할 수 있습니다. 첫 번째 예에서는 한 번만 허용됩니다. 첫째

2

, 나는 첫 번째 코드가 있어야한다고 생각 :

(function ($) 
{ 
    //Perform operation X 
})(jQuery); 

그리고 지금까지 내가 말할 수있는, 두 번째는 함수를 생성한다는 점을 제외하고 모두 코드 사이에는 차이가 없습니다, 상점 그것은에서 전역 변수를 호출 한 다음 첫 번째 함수가 익명의 함수를 생성하고 즉시 호출하는지 여부와 상관없이이 변수를 호출합니다.

+0

()은 어느 쪽이든 할 수 있습니다. JSLint는 마지막에 괄호를 선호하기 때문에 내가 그렇게합니다. –

+0

맞아,이 스레드는이 주제에 대해 좀 더 설명합니다 : http://stackoverflow.com/questions/3783007/is-there-a-difference-between-function-and-function – Deleteman

관련 문제