하나 이상의 라인이 나온 후에 만}, 프로그램 입력 종료가 삽입됩니다.
즉, 라인, 코드 블록 및 프로그램이 종료되는 세미콜론 만 생략 할 수 있습니다.
즉, 다음 코드를 쓸 수 있습니다.
코드 사본은 다음과 같습니다.
기능 제곱 (x) {
var n = +x
반환 n * n
}
그러나 다음 코드처럼 쓸 수 없으므로 오류를보고합니다.
코드 사본은 다음과 같습니다.
함수 영역 (r) {r = +r return math.pi*r*r} // 오류
후속 입력 마크를 구문 분석 할 수없는 경우에만 삽입하십시오
다시 말해, 세미콜론 삽입은 오류 보정 메커니즘입니다. 코드를 읽고 말하십시오
코드 사본은 다음과 같습니다.
a = b
(에프())
// 다음 문의 단가로 별도의 명령문으로 올바르게 구문 분석 할 수 있습니다.
a = b (f ())
a = b
에프()
// 두 개의 독립적 인 진술로 구문 분석되었습니다
a = bf (); // 구문 분석이 잘못되었습니다
따라서 세미콜론을 합법적으로 생략 할 수 있는지 여부를 결정하려면 다음 진술의 시작 부분에주의를 기울여야합니다.
(, [, +, -및 /, 그러면 세미콜론을 생략하지 않는 것이 가장 좋습니다.
설명 할 모범을 보이십시오
코드 사본은 다음과 같습니다.
a = b
[ 'r', 'g', 'b']. foreach (function (key) {
Console.log (키);
});
당신은 원래 오류가 없다고 생각했지만 파서는 다음 진술에 구문 분석했습니다.
코드 사본은 다음과 같습니다.
a = b [ 'r', 'g', 'b']. foreach (function (key) {
Console.log (키);
});
두 번째 문장은 [로 시작하기 때문에, 구문자는 첫 번째 명령문 후에 세미콜론을 자동으로 삽입하지 않으므로 위와 같이 구문 분석됩니다. b [ 'b']가 아닌 것은 아닙니다. 위의 방정식을 구문 분석 할 때 틀렸습니까?
따라서 5 자로 시작하는 진술이 (, [, +, -및 / 및 / / / / / / / / / / /는 세미콜론을 생략하지 않는 것이 가장 좋습니다.
세미콜론을 생략하려면 숙련 된 프로그래머가 성명서에 따라 파서가 올바르게 구문 분석되도록합니다. 아래와 같이
코드 사본은 다음과 같습니다.
a = b
var x // 선언문은 여기에 특별히 추가되어 a = b가 (f ()로 구문 분석되지 않도록합니다.
(에프())
따라서 세미콜론을 생략 해야하는 경우 다음 줄의 시작 마크가 위 5 자인지 확인하여 파서가 세미콜론의 자동 삽입을 비활성화하거나 5 개의 문자 (, [, [, +, -및 /.
세미콜론을 생략하면 스크립트 연결 문제가 발생합니다
코드 사본은 다음과 같습니다.
//file1.js
(기능 () {
// ...
}) ()
//file2.js
(기능 () {
// ...
}) ()
위의 두 파일이 연결되면 다음과 같이 구문 분석됩니다.
코드 사본은 다음과 같습니다.
(기능 () {
// ...
})()(기능 () {
// ...
}) ()
따라서 세미콜론을 생략하려면 현재 파일의 다음 태그뿐만 아니라 스크립트가 연결된 후 명령문 후에 나타날 수있는 태그에 대해서도주의해야합니다.
Parser Parsing 오류를 피하기 위해 각 파일에서 추가 세미콜론을 접두어로, 부주의 한 연결로부터 스크립트를 보호 할 수 있습니다. 파일의 초기 명령문이 위 5 가지 연약한 문자로 전환되면 추가 세미콜론 접두사를 추가해야합니다.
자바 스크립트 구문 제한 생성
JavaScript Syntax 제한 생산 : 두 문자 사이에는 라인 브레이크가 허용되지 않습니다.
예를 들어 :
코드 사본은 다음과 같습니다.
반품
{};
위의 코드는 구문 분석됩니다
코드 사본은 다음과 같습니다.
반품;
{}
;
자체 증가 및 자체 추출 작업에 대한 세미콜론 삽입 규칙
코드 사본은 다음과 같습니다.
에이
++
비
위의 코드가 무엇을 구문 분석 할 것인지 생각해보십시오. AutoinCrement 연산자는 사전 설정 연산자와 우편 집합 연산자로 사용할 수 있지만 라인이 나오기 전에는 게시물 연산자가 나타날 수 없으므로 위의 코드가 구문 분석됩니다.
코드 사본은 다음과 같습니다.
에이;
++ b;
세미콜론은 FOR Loop Empty 문의 헤드에 분리기로 자동으로 삽입되지 않습니다.
코드 사본은 다음과 같습니다.
for (var i = 0, 총 = 1
나는 <길이
i ++) {
총*= i;
}
위의 코드에는 구문 분석 오류가 있습니다.
빈 루프 본체의 중간에 세미콜론이 표시되어야하며, 그렇지 않으면 구문 분석 오류로 이어질 것입니다.
코드 사본은 다음과 같습니다.
함수 mytest () {
while (true)
}
오류를 피하기 위해 다음과 같이 작성해야합니다
코드 사본은 다음과 같습니다.
함수 mytest () {
while (true);
}
요약합시다
1.} 태그 이전, 줄 끝에서 및 프로그램 끝에서 반도를 추론합니다.
2. 다음 마크를 구문 분석 할 수없는 경우에만 세미콜론을 추론합니다.
3. (, [, +, -및 / characters로 시작하기 전에 세미콜론을 생략해서는 안됩니다.
4. 스크립트가 연결되면 스크립트간에 세미콜론을 명시 적으로 삽입하십시오.
5. 리턴, 던지기, 휴식, 계속, ++ 또는 -전에 줄을 감싸서는 안됩니다.
6. 세미콜론은 루프 또는 빈 명령문의 헤더에 대한 분리기로 추론 할 수 없습니다.