JavaScript_기본 지식의 세미콜론 삽입 메커니즘에 대한 자세한 소개

WBOY
풀어 주다: 2016-05-16 16:14:35
원래의
1193명이 탐색했습니다.

은 } 앞, 하나 이상의 줄 바꿈 뒤, 프로그램 입력 끝에만

삽입됩니다.

즉, 줄 끝, 코드 블록, 프로그램 끝에서만 세미콜론을 생략할 수 있다는 의미입니다.

즉, 다음 코드를 작성할 수 있습니다

코드 복사 코드는 다음과 같습니다.

함수 square(x) {
var n = x
n * n 반환
}

하지만 다음과 같은 코드는 작성할 수 없습니다. 그렇지 않으면 오류가 보고됩니다
코드 복사 코드는 다음과 같습니다.

함수 영역(r) { r = r return Math.PI*r*r }//error

후속 입력 태그를 구문 분석할 수 없는 경우에만

삽입

즉, 세미콜론 삽입은 오류 수정 메커니즘입니다. 코드를 보고 이야기해보세요

코드 복사 코드는 다음과 같습니다.

a = b
(f())
//단가는 다음 문장으로 정확하게 구문 분석할 수 있습니다
a = b(f())

a=b
에프()
//두 개의 독립적인 문으로 구문 분석됨
a = bf();//분석 오류

그래서 법적으로 세미콜론을 생략할 수 있는지 판단하려면 다음 문장의 시작 부분에 주의를 기울여야 합니다.

(, [, , - 및 / 이 5개의 문자가 문을 시작하므로 앞에 세미콜론을 생략하지 않는 것이 가장 좋습니다.

예를 들어주세요

코드 복사 코드는 다음과 같습니다.

a = b
['r', 'g', 'b'].forEach(함수(키) {
console.log(키);
});

원래는 오류가 없다고 생각하셨는데, 파서가 이를 다음 문장으로 파싱했습니다
코드 복사 코드는 다음과 같습니다.

a = b['r', 'g', 'b'].forEach(함수 (키) {
console.log(키);
});

두 번째 문이 [로 시작하기 때문에 파서가 첫 번째 문 뒤에 자동으로 세미콜론을 삽입하지 않으므로 위와 같이 파싱됩니다. 위 수식은 b['b'].forEach 로 파싱됩니다.

그래서 이 5개의 문자(, [, , -, / )로 시작하는 문장의 경우 앞에 세미콜론을 생략하지 않는 것이 가장 좋습니다.

세미콜론을 생략하려는 경우 숙련된 프로그래머는 이 명령문 뒤에 선언문을 추가하여 파서가 이를 올바르게 구문 분석하는지 확인합니다. 아래와 같이

코드 복사 코드는 다음과 같습니다.

a = b
var x//A 선언문은 a = b가 (f())
와 함께 구문 분석되지 않도록 여기에 특별히 추가되었습니다. (f())

따라서 세미콜론을 생략해야 하는 경우에는 다음 줄의 시작 표시가 5개 문자 이상인지 확인해야 합니다. 이로 인해 파서가 세미콜론 자동 삽입을 비활성화하게 되거나, 5개 문자(, [, , - 및 / 앞에 세미콜론을 붙입니다

세미콜론을 생략하면 스크립트 연결 문제가 발생합니다

코드 복사 코드는 다음과 같습니다.

//file1.js
(함수 () {
//......
})()

//file2.js
(함수 () {
//......
})()

위 두 파일을 연결하면 다음과 같이 파싱됩니다

코드 복사 코드는 다음과 같습니다.

(함수 () {
//......
})()(함수 () {
//......
})()

따라서 세미콜론을 생략하려면 현재 파일의 다음 토큰뿐만 아니라 스크립트가 연결된 후 명령문 뒤에 나타날 수 있는 토큰도 주의해야 합니다.

파서 구문 분석 오류를 방지하려면 각 파일 앞에 세미콜론을 추가하여 부주의한 연결로부터 스크립트를 보호할 수 있습니다. 파일의 첫 번째 문이 위에서 언급한 5개의 취약한 문자로 열리는 경우 세미콜론 접두사를 추가해야 합니다.

JavaScript 구문으로 인해 제작이 제한됩니다

JavaScript 구문은 제작을 제한합니다. 두 문자 사이에는 줄 바꿈이 허용되지 않습니다.

예:

코드 복사 코드는 다음과 같습니다.

복귀
{};

위 코드는
로 파싱됩니다.
코드 복사 코드는 다음과 같습니다.

반품;
{}
;

자동 증가 및 자동 감소 연산을 위한 세미콜론 삽입 규칙

코드 복사 코드는 다음과 같습니다.





생각해 보세요. 위의 코드는 무엇으로 해석될까요? 증가 연산자는 접두사 연산자와 후위 연산자로 모두 사용될 수 있지만 후위 연산자는 개행 앞에 나타날 수 없으므로 위 코드는
로 구문 분석됩니다.
코드 복사 코드는 다음과 같습니다.

ㅋㅋㅋ
ㄴ;

빈 for 루프 문 앞에 구분 기호로 세미콜론이 자동으로 삽입되지 않습니다

코드 복사 코드는 다음과 같습니다.

for (var i = 0,total=1
나는 <길이
나 ) {
합계*=i;
}

위와 같은 코드는 구문 분석 오류를 발생시킵니다.

빈 루프 본문의 while에도 세미콜론을 표시해야 합니다. 그렇지 않으면 구문 분석 오류가 발생합니다

코드 복사 코드는 다음과 같습니다.

함수 mytest() {
동안(참)
}

오류를 방지하려면 다음과 같이 작성해야 합니다
코드 복사 코드는 다음과 같습니다.

함수 mytest() {
동안 (사실) ;
}

요약하자면

1. 세미콜론은 } 표시 앞, 줄 끝, 프로그램 끝에서만 추론됩니다.
2. 세미콜론
은 다음 태그를 파싱할 수 없는 경우에만 추론됩니다. 3. (, [, , -, / 문자로 시작하는 문 앞에 세미콜론
을 생략하면 안 됩니다. 4. 스크립트 연결 시 스크립트 사이에 세미콜론
을 명시적으로 삽입하세요. 5. return, throw, break, continue 또는 --
매개변수 앞에는 줄을 끊지 마세요. 6. 세미콜론은 for 루프의 선두나 빈 문의 구분자로 추론할 수 없습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!