2014-11-06 1 views
0

는 :일반 문자열이 버그없는 것으로 간주되는 이유는 무엇입니까? 내가 오류가 발생하지 않는 코드의 다음 줄이있는 경우 코드에서

'any string' 
console.log('test'); 

를 분명히이 예외 :

'any string' console.log('test'); // missing ; 

하지만이 : 'any string'; console.log('test');

나는 의미를 '임의의 문자열'은 스크립트에서 아무 것도하지 않지만 버그가없는 것으로 간주됩니다. 이유는 무엇입니까?

+0

를 제공에

당신의 조각을 붙여,'버그가 아닙니다? – Itay

+0

이유는'5;'와''foo ';'가 작동하는 이유는'console.log();'호출이 변수로 출력하지 않고 작동하도록하는 동일한 인터프리터 때문입니다. – h2ooooooo

+0

자동 세미콜론 삽입 (ASI)은 두 줄을 한 줄로 이해할 수없는 경우에 발생합니다. 이 경우 명확하게 두 행을 세미콜론없이 함께 이해할 수 없으므로 ASI가 적용됩니다. – apsillers

답변

4

문자열은 단지 표현식입니다. JS는 함수 호출과 일반 표현식을 구별하지 않습니다.

첫 번째 경우 첫 번째 줄 끝 부분에 세미콜론이 자동으로 배치되어 분할됩니다. 두 번째 예에서는 분명히 존재하지 않습니다. 셋째, 다시, 당신은 그것들을 다른 표현들로 나눕니다.

심지어 console.log()은 표현식입니다. undefined을 반환하고 부작용이있는 함수 호출입니다.

이 효과는 엄격 모드 해석을 강제하기 위해 의도적으로 사용됩니다. 이론적으로, ; :

function myFunc() { 
"use strict"; // just the plain string 
// function body 
} 
+0

가짜 질문에 대한 답변 주셔서 감사합니다. –

1

자바 스크립트 문은 세미콜론으로 종료됩니다으로 엄격한 모드 기능이 기록됩니다. } 또는 바꿈 ("Rules of Automatic Semicolon Insertion" in the spec) 후에, 즉 -

그러나 JS 세미콜론이 특정한 조건 코드에 삽입 될 수 세미콜론 삽입의 개념을 갖는다.

0

대부분의 브라우저에서 JavaScript 엔진은 다른 언어에서 기대하는 것보다 엄격하지 않습니다.

따라서 가끔 JsLint과 같은 정적 분석 도구로 JavaScript 코드를 확인하는 것이 좋습니다. 이 같은 이유로`5의

Expected an assignment or function call and instead saw an expression.

'any string'

line 1 character 13 Expected ';' and instead saw 'console'.

'any string'

line 2 character 1 'console' was used before it was defined.

console.log('test');

관련 문제