스펙의 세 가지 규칙을 너무 잘 이해할 수 없었습니다.보다 명확한 영어를 원합니다. 그러나 여기 JavaScript에서 수집 한 내용이 있습니다 : The Definitive Guide, 6th Edition, David Flanagan, O'Reilly, 2011 :
인용문:
JavaScript는 모든 줄 바꿈을 세미콜론으로 취급하지는 않습니다. 일반적으로 세미콜론없이 코드를 구문 분석 할 수없는 경우에만 줄 바꿈을 세미콜론으로 처리합니다.
다른 인용문 : 코드
var a
a
=
3 console.log(a)
JavaScript는 두 번째 줄 바꿈을 세미콜론으로 취급하지 않습니다. 더 긴 명령문 a = 3을 계속 구문 분석 할 수 있기 때문입니다.
과:
JavaScript가 줄 바꿈을 두 번째 줄을 첫 번째 줄의 명령문 연속으로 구문 분석 할 수없는 경우 세미콜론으로 해석한다는 일반적인 규칙에 대한 두 가지 예외. 첫 번째 예외는 return, break 및 continue 문을 포함합니다.
...이 단어 뒤에 줄 바꿈이 나타나면 ... JavaScript는 항상 해당 줄 바꿈을 세미콜론으로 해석합니다.
... 두 번째 예외는 ++ 및 −− 연산자와 관련이 있습니다 ...이 연산자 중 하나를 접미사 연산자로 사용하려면 해당 연산자가 적용되는 식과 같은 줄에 나타나야합니다. 그렇지 않으면 줄 바꿈은 세미콜론으로 처리되고 ++ 또는-는 다음 코드에 적용되는 접두사 연산자로 구문 분석됩니다. 예를 들어 다음 코드를 고려하십시오.
x
++
y
로 해석 x; ++y;
되지 않습니다.x++; y
그래서 나는 그것을 단순화하려고 생각합니다.
(1) 일부 키워드가 좋아 후 : 2가지 경우를 제외하고 - 일반적으로, 자바 스크립트는 오랫동안 말이뿐만 코드의 연장으로 취급한다 return
, break
, continue
, 그리고 그것을 보는 경우 (2) ++
또는 --
새 줄에 다음을 추가합니다 ;
이전 줄의 끝에서.
"이해가되는 한 코드의 연속으로 처리"에 대한 부분은 정규 표현식의 욕심 매칭과 같은 느낌을줍니다.
위에서 말했듯이, 그 의미는 return
줄 바꿈 하는 JavaScript 인터프리터는;
(다시 인용 : 다음과 같은 단어 뒤에 줄 바꿈이 나타나는 경우 return
] JavaScript는 항상 줄 바꿈을 세미콜론으로 해석합니다)
이 때문에 고전적인 예는
return
{
foo: 1
}
JavaScript 인터프리터는 다음과 같이 처리하므로 예상대로 작동하지 않습니다.
return; // returning nothing
{
foo: 1
}
다음 직후에 줄 바꿈이 없어야합니다 return
.
return {
foo: 1
}
제대로 작동합니다. after 문 ;
을 사용하는 규칙을 따르는 경우 자신을 삽입 할 수 있습니다 ;
.
return {
foo: 1
};