2013-12-22 4 views
1

JavaScript 북마크릿을 작성할 때 //을 사용할 수 없습니다. JavaScript 코드가 단일 행으로 처리되기 때문입니다. 대신 /* ... */을 사용해야합니다. 이것은 뉴 라인이 무시 되더라도 일반 스크립트에서 //을 사용할 수 있기 때문에 나에게 이해가되지 않습니다.JavaScript가 개행을 무시하면 JavaScript는 한 줄 주석을 어떻게 구문 분석합니까?

에서 The Definitive Guide

자바 스크립트 2.3은 의 섹션 2.5에서 ...이어서

공백

, 탭 및 프로그램 토큰간에 나타나는 바꿈 무시 확실한 안내서

... Any te //와 줄 끝 사이의 xt는 주석으로 처리됩니다. ...

이러한 문은 모순 된 것처럼 보입니다.

섹션 2.3에 따르면 일반 스크립트는 줄 바꿈이 무시되기 때문에 J.S의 거의 한 줄이기도합니다. 누군가가 내게 왜 //이 일반 스크립트에서는 가능하지만 북마크릿에서는 가능하지 않다고 설명 할 수 있습니까?

+3

당신은 즉, 가장 중요한 부분을 무시하는 것 같다 * "... 그 토큰 ... 사이에 표시"* – Phil

+0

당신 boomarklets [여기] (http://gutfullofbeer.net/escape.html)를 URL에 붙여 넣을 수 있습니다 (그리고 인코딩을 해제하십시오). – Pointy

+2

"JavaScript에서 공백, 탭 및 줄 바꿈을 무시합니다"라는 문구가 잘못되었습니다. 그것들은 전혀 무시되지 않고, 토큰을 분리하고, 자동 세미콜론을 삽입하고, 다음 스크립트가있는 한 줄 주석을 끝내기 위해 필수적입니다. See [ECMA-262 §7.2] (http://ecma-international.org/ecma-262/5.1/#sec-7.2) :'공백 문자는 소스 텍스트의 가독성을 높이고 토큰을 분리하는 데 사용됩니다 (분리 불가능한 어휘 단위). 그러나 그다지 중요하지 않다. " 또한 [줄 끝 기호] (http://ecma-international.org/ecma-262/5.1/#sec-7.3)는 공백이 아닙니다. – RobG

답변

3

나 자바 스크립트

프로그램이 토큰으로 나누어 프로그램에 토큰 사이 을 표시 공백, 탭, 줄 바꿈을 무시 첫 번째 인용

의 일부를 강조하자. 예를 들어, 다음 프로그램

var x = "abc123"; 

즉 5 토큰, var, x, =, "abc123";있다. 토큰 사이에 공백을 많이 넣으면

var x  = "abc123"  ; 

과 상관 없습니다. 그러나 토큰 내부에 공간을두면 프로그램을 변경할 수 있습니다. 예 :

va r x = " a b c 12 3"; 

은 컴파일되지 않습니다.

이 차이점은 두 문이 모순되지 않는 이유입니다. 주석은 무시되는 단일 토큰입니다.주석의 중간에 개행을 넣으면 프로그램의 토큰 사이에 공백을 넣지 않고 토큰 중간에 공백을 넣을 수 있습니다.

// 주석은 나머지 내용을 무시합니다. 북마크릿에는 1 줄만 포함되어 있기 때문에 // 이후의 모든 내용을 주석 처리합니다. 일반적인 스크립트에서는 여러 줄을 가질 수 있으므로 같은 문제가 발생하지 않습니다. 이 지정하는 방법을 궁금해하는 경우

, 여기가 relevant part of the grammar in the ECMAScript 5 specification입니다 :

SingleLineComment :: 
    // SingleLineCommentCharsopt 

SingleLineCommentChars :: 
    SingleLineCommentChar SingleLineCommentCharsopt 

SingleLineCommentChar :: 
    SourceCharacter but not LineTerminator 
+0

아. 이 대답 + @ RobG의 의견은 나를 더 잘 이해하는 데 도움이되었습니다. 줄 바꿈은 동시에 무시되지 않으며 무시되지 않습니다. 토큰 사이의 개행 문자가 부적절하다는 의미에서 "무시"됩니다. 그들은 렉서가 나타나는 위치에 따라 다른 토큰 (즉, 주석)을 얻을 수 있다는 점에서 무시되지 않습니다. 옳은? – linstantnoodles

+0

기본적으로 데이비드 플래너 건 (David Flanagan)이 2.3 절에서 좀 더 자세히 설명했으면 좋겠다. D – linstantnoodles

+0

@linstantnoodles 렉싱 프로세스에서는 개행이 중요하다. 자동 세미콜론 삽입으로 인해 하나의 문장으로 간단하게 말할 수있는 것보다 조금 더 복잡합니다. 그러나 당신은 그것의 요지가 있습니다. –

2

북마크릿은 한 줄짜리 스크립트이기 때문에 정규 스크립트는 여러 줄이 될 수 있습니다.

섹션 2.3은 다소 모호합니다. 화이트 스페이스가 문제가되는 경우가 있지만, //은 프로세서로 하여금 그 라인의 나머지 부분을 무시하도록합니다.

북마크릿에 //을 사용하면 바로 처리가 중단됩니다.