수색…


자동 세미콜론 삽입 규칙

세미콜론 삽입의 세 가지 기본 규칙이 있습니다.

  1. 프로그램이 왼쪽에서 오른쪽으로 구문 분석 될 때 문법의 생성으로 허용되지 않는 토큰 ( 기분 발급 토큰 이라고 함)이 발생하면 다음 중 하나 이상이 해당되는 경우 문제의 토큰 앞에 세미콜론이 자동으로 삽입됩니다 조건이 참인 경우 :
  • 위반 토큰은 적어도 하나의 LineTerminator 의해 이전 토큰과 구분됩니다.
  • 문제가되는 토큰은 } 입니다.
  1. 프로그램이 왼쪽에서 오른쪽으로 구문 분석 될 때 토큰 입력 스트림의 끝이 발생하고 구문 분석기가 입력 토큰 스트림을 하나의 완전한 ECMAScript Program 으로 구문 분석 할 수 없으면 세미콜론이 자동으로 끝에 삽입됩니다. 입력 스트림
  2. 프로그램이 왼쪽에서 오른쪽으로 구문 분석 될 때 문법의 일부 제작에서 허용되는 토큰이 발견되었지만 제작은 제한된 제작물 이며 토큰은 주석 바로 다음에 터미널이나 비 터미널의 첫 번째 토큰이됩니다 제한된 생산 내에서 " [여기에 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