2009-12-09 2 views
133

나는 맨 처음에이 표기법을 보았다 궁금JavaScript 라이브러리의 주요 세미콜론은 무엇을합니까? 몇 가지 자바 스크립트 라이브러리에서

/** 
* Library XYZ 
*/ 
;(function() { 
    // ... and so on 

나는 "즉시 실행 기능"완벽하게 편안 해요 동안 구문

(function(){...})() 

무엇을 선도 세미콜론 에 대한 것입니다. 내가 생각할 수있는 것은 그것이 보험이라는 것입니다. 즉, 라이브러리가 다른 버그가있는 코드에 포함되어 있으면 "가장 최근의 문장이 여기서 가장 늦게 끝나는"종류의 스피드 범프 역할을합니다.

는 다른 기능을 가지고있다?

+6

나는 이미 올바른 대답을 가지고 있다고 생각합니다. 전세계에 많은 자바 스크립트 JavaScript가 있으므로 보험이 중요합니다. – kdgregory

답변

120

그것은 안전하게, 하나에 여러 개의 JS 파일을 연결하는 하나 개의 HTTP 요청으로 더 빨리 서비스를 제공 할 수 있습니다.

+12

하지만 모든 파일이 올바르게 코딩되면 필요하지 않습니다. – Boldewyn

+5

No : 당신의 예제에서'(function() {...})() (function() {...})()'을 얻을 것입니다. –

+6

"올바르게 코딩되었습니다"라는 의미는 모든 라이브러리가 정확한 세미콜론으로 끝나는 것입니다 ... – Boldewyn

4

그것의 좋은 당신은 JS 코드를 축소하세요 때. 예기치 않은 구문 오류를 방지하십시오.

+0

뭐라고 요? 세미콜론은 다음 코드에서 어떤 의미가 있습니까? 아니면 실제 라이브러리 앞에 합쳐진 가짜 버그 코드일까요? – Boldewyn

+0

그 코드만으로 특별한 의미는 없지만 코드가 다른 코드의 중간에있을 때 한 줄로 축소하면 예기치 않은 오류가 발생할 수 있습니다 (예 : (1) 이전 줄에 세미콜론이 누락되었습니다. 1) 이전 버전도 함수이기 때문에 오류가 발생하면 디버깅하기가 어렵습니다. (벌써) 벌금을 줄이기 전에 버그가 있다고합니다. – YOU

+1

하지만 이것을 올바르게 처리하는 것은 반드시 minifier의 책임입니다. 현재 버그가 많은 minifier가 일반적입니까? –

24

가장 좋은 대답은 실제로 질문에 주어졌다, 그래서 난 그냥 명확성을 위해 여기에 적어됩니다

즉시-호출 함수 표현식 앞에있는 주요한 ; 중에 파일을 추가 오류를 방지 할 수있다 적절하게 종료되지 않은 표현식을 포함하는 파일에 대한 연결은 ;입니다.

모범 사례 세미콜론으로 식을 종료 할뿐만 아니라 안전 장치로 최고의 세미콜론을 사용하는 것입니다. 명령문로 시작하는 경우

일반적으로
+0

방어 세미콜론을 사용하는 경우에도 세미콜론으로 표현식을 종료해야하는 이유는 무엇입니까? 각 행 끝에 세미콜론을 사용하거나 방어적인 세미콜론을 사용할 수 있습니다. 둘 다하는 것은 사람들이 둘 다 할 이유가 있다고 잘못 결론 짓게합니다. 방어적인 세미콜론을 사용하는 것이 좋습니다. ''\ n "'의 모든 인스턴스를'";로 대체하라는 조언은 \ n "'의미가 없습니다. –

+2

@VladimirKornea : 당신은 항상 당신 만의 라이브러리를 사용하고있는 것이 아니기 때문에 :) – jvenema

+0

@jvenema 왜 그렇게 생각하는지 모르겠다. –

20

은, (, [, /, + 또는 -., 그것은 이전 명령문의 연속으로 해석 수있는 기회가있다 계산서, /, +로 시작 와 - 실제로는 매우 드문,하지만 그래서 그러한 문장의 시작 부분에 방어 세미콜론을 넣어 문으로 시작 (및 [적어도 자바 스크립트 프로그래밍의 일부 스타일, 전혀 드문 같은 일부 프로그래머. 이 수정되기 전에는 심지어 if 문이 제대로 작동 계속하고 이전 종료 세미콜론을 제거 :

var x = 0 // Semicolon omitted here 
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate 

출처 :

Javascript the Definitive Guide 6th edition

6

이는 선도적 인 세미콜론라고합니다.

주된 목적은 문제를 일으킬 수있는 부적절하게 닫힌 코드에서 자신을 보호하는 것입니다. 세미콜론을 사용하면 이러한 일이 발생하지 않습니다. 앞의 코드가 부적절하게 닫히면 세미콜론이이를 수정합니다. 제대로 닫히면 세미콜론이 무해하며 부작용이 없습니다.

관련 문제