수색…
자동 세미콜론 삽입 규칙
세미콜론 삽입의 세 가지 기본 규칙이 있습니다.
- 프로그램이 왼쪽에서 오른쪽으로 구문 분석 될 때 문법의 생성으로 허용되지 않는 토큰 ( 기분 발급 토큰 이라고 함)이 발생하면 다음 중 하나 이상이 해당되는 경우 문제의 토큰 앞에 세미콜론이 자동으로 삽입됩니다 조건이 참인 경우 :
- 위반 토큰은 적어도 하나의
LineTerminator
의해 이전 토큰과 구분됩니다.- 문제가되는 토큰은
}
입니다.
- 프로그램이 왼쪽에서 오른쪽으로 구문 분석 될 때 토큰 입력 스트림의 끝이 발생하고 구문 분석기가 입력 토큰 스트림을 하나의 완전한 ECMAScript
Program
으로 구문 분석 할 수 없으면 세미콜론이 자동으로 끝에 삽입됩니다. 입력 스트림- 프로그램이 왼쪽에서 오른쪽으로 구문 분석 될 때 문법의 일부 제작에서 허용되는 토큰이 발견되었지만 제작은 제한된 제작물 이며 토큰은 주석 바로 다음에 터미널이나 비 터미널의 첫 번째 토큰이됩니다 제한된 생산 내에서 " [여기에
LineTerminator
없습니다] "(따라서 그러한 토큰은 제한된 토큰이라고 함) 제한된 토큰은 적어도 하나의LineTerminator
의해 이전 토큰과 분리되어 있으며, 제한된 토큰 앞에 세미콜론이 자동으로 삽입됩니다 .그러나 이전 규칙에는 추가 우선 적용 조건이 있습니다. 세미콜론을 빈 문으로 구문 분석하거나 해당 세미콜론이
for
문 머리글의 두 세미콜론 중 하나가 될 경우 세미콜론이 자동으로 삽입되지 않습니다. 12.6.3).
출처 : ECMA-262, 5 판 ECMAScript 사양 :
자동 세미콜론 삽입으로 인해 영향을받는 문
- 빈 문장
-
var
문 - 표현 문
-
do-while
문 -
continue
진술하다 -
break
문 -
return
문 -
throw
문
예 :
토큰의 입력 스트림의 끝이 발생하고 구문 분석기가 입력 토큰 스트림을 하나의 완전한 프로그램으로 구문 분석 할 수 없으면 입력 스트림의 끝에 세미콜론이 자동으로 삽입됩니다.
a = b
++c
// is transformed to:
a = b;
++c;
x
++
y
// is transformed to:
x;
++y;
배열 색인 / 리터럴
console.log("Hello, World")
[1,2,3].join()
// is transformed to:
console.log("Hello, World")[(1, 2, 3)].join();
return 문 :
return
"something";
// is transformed to
return;
"something";
return 문에 세미콜론 삽입 방지
JavaScript 코딩 규칙은 블록의 시작 괄호를 선언의 동일한 행에 배치하는 것입니다.
if (...) {
}
function (a, b, ...) {
}
다음 줄 대신에 :
if (...)
{
}
function (a, b, ...)
{
}
이는 객체를 반환하는 return 문에 세미콜론 삽입을 방지하기 위해 채택되었습니다.
function foo()
{
return // A semicolon will be inserted here, making the function return nothing
{
foo: 'foo'
};
}
foo(); // undefined
function properFoo() {
return {
foo: 'foo'
};
}
properFoo(); // { foo: 'foo' }
대부분의 언어에서 시작 괄호의 배치는 코드 실행에 실제 영향을주지 않으므로 개인적인 취향에 달려 있습니다. 자바 스크립트에서 보았 듯이 다음 줄에 초기 괄호를 배치하면 침묵 오류가 발생할 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow