2009-06-23 2 views
10

나는의 jQuery UI 코드를보고 있었다, 나는 모든 파일이 같은 구조로 시작하는 것을 발견 : jQuery 전에 세미콜론이 왜, 왜 논리적 OR 이루어지고 있습니다 :자바 스크립트의 결과는 무엇입니까?

;jQuery.ui || (function($) { 

내 질문은 ?

일예로 ... 하나 jQuery.ui 존재, 또는이 함수를 정의 :

JRH는

영어
+0

질문의 첫 번째 질문은 [JavaScript 라이브러리의 주요 세미콜론은 무엇입니까?] (0120-337-0048572) – Bergi

+0

또는 그 반대의 예입니다. 당신이 링크 한 질문은 이보다 몇 개월 더 늦었습니다. – jrharshath

+0

제가 링크 한 질문은 더 나은 답변으로 주제에 관한 표준적인 것입니다. 그래서 그것이 제가 링크 된 이유입니다. – Bergi

답변

21

왜 jQuery를 앞에 세미콜론이 위의 라인의 분류 버전의 페이지 끝까지 스크롤 할 수 있었다?

안전한 파일 연결을 보장하기 위해 세미콜론이 있습니다. (라이브러리 및 라이브러리 구성 요소는 자주 단일 파일로 묶입니다.)

왜 논리 OR이 수행됩니까?

오른쪽의 자체 호출 익명 기능은 명령문의 왼쪽이 거짓 값으로 평가되는 경우에만 실행됩니다. 따라서 jQuery.ui이 페이지에 이미 존재하면 함수가 실행되지 않습니다.jQuery.ui이 아직 존재하지 않는 경우에만 실행됩니다.

+2

hehe, "거짓", 좋은. 그것은 false로 평가되는 값을 설명하는 멋진 방법입니다. 나는 그것을 좋아합니다. –

+1

내 용어가 아닙니다 ... Doug Crockford 비디오에서 들었을 것 같습니다. – James

1

, 코드 행은 말한다 jQuery.ui이 정의되어 있지 않으면 함수가 작성됩니다.

초기 세미콜론은 효과가 없어야합니다. 코드 문 끝을 구분합니다.

1

파일을 여러 번 포함하고 평가할 수 있도록 논리 OR이 수행되고 자체적으로 크롤링되지 않는다고 생각합니다. 다시로드하면 jQuery.ui가 이미 정의되고 뭐든지해라.

누군가가 스크립트 태그를 추적하지 못하면 실수로 파일을 여러 번 포함 할 수 있습니다.

세미콜론의 경우 마지막 문장이 세미콜론으로 끝나지 않아도 파일이 다른 파일에 포함 되어도 작동하는지 확인할 수 있습니다.

가짜 세미콜론은 피해를주지 않으며 누락 된 세미콜론 일 수 있습니다.

6

나는 ;이 자바 스크립트 패커가 라인을 망쳐 놓지 않도록하는 것이라고 생각하지만, 그게 내가 가진 최선이다.

논리가 있거나 jQuery.ui이 두 번 선언되지 않도록해야합니다. 자바 스크립트는 단락을 일으키므로 왼손면이 truthey(감사합니다 JP!) 인 것으로 확인되면 ||의 오른쪽을 평가하지 않습니다..

보너스 구문 해독, 익명 함수에 전달 된 $는 jQuery에 대한 참조입니다. 하나는

:-) 클릭하기 전에 나는 그래서, 여기에

;    // extra semi colon to ensure correct concatenation and minifying 
jQuery.ui  // check if the variable called jQuery.ui is truthey 
||    // OR if jQuery.ui isn't defined 
(function($) {...})(jQuery); // define and execute an anonymous function 
          // passing in the conflict safe jQuery 
          // as the parameter called $