2011-03-08 3 views
4

자바 스크립트의 불쾌한 ASI (자동 세미콜론 삽입), 종종 this example를 인용에 대한 People often talk ...ASI 또는 리턴 문법에 문제가 있습니까?

function a() { 
    return [ 
     'a', 
     'b', 
     'c' 
    ]; 
} 

function b() { 
    return 
    [ 
     'a', 
     'b', 
     'c' 
    ]; 
} 

console.log(a(), b()); 
// ["a", "b", "c"] undefined 

정말 b()return 후 삽입되는 세미콜론 있는가, 또는 자바 스크립트 문법 상태를 수행하는 반환 값은 반드시 그 명시 적으로 그것의 뒤에 진술된다 (ie no \n)?

+1

다음 링크에서 답변을 찾을 수 있습니다 .. http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion –

답변

2

세미콜론이 "삽입 됨"이라고 생각하지 않습니다. 구문 분석의 모호함이 있으며 해석은 "반환"과 다음 표현을 두 개의 별도 구문으로 처리하는 것입니다. 나는 그것이 순수한 문법적 관점에서 의미가있는 이유를 이해한다. 그러나 그 결정이 특정의 경우 "return"문장의 경우처럼 이 보장되고 보장 된 후 실행되지 않은 고아 표현식 문을 남겨 두는 것으로 보입니다. .

트릭이 생성 한 총 SO rep 포인트가 얼마나되는지 궁금합니다.

편집 4월 4일 는 "세미콜론 삽입"이라고 두 개의 문으로 문을 분할하는 2014 — 기술적으로 그 결정. 아무도 실제로 삽입 된 세미콜론을 보지 못합니다. 그것은 파서의 상상력의 고물입니다. 효과는 당신이 무엇이라고 부르는 것과 동일합니다.

+0

당신의 대답은 그렇지 않은 것에 대한 이해가됩니다. Bravo :) +1 – alex

+0

http://inimino.org/~inimino/blog/javascript_semicolons 간결하고 명확한 내용을보십시오. –

0

반환 값이 return 문과 동일한 줄에 있어야한다는 것은 사양에 아무것도 없으며 세미콜론 삽입이 잘못되었습니다.

+2

이 인용문은 다르게 말하지 않습니까? ? * [ECMASpec] (http://es5.github.io/x5.html)에서 [여기에 LineTerminator가 없음] Expression; *을 반환하십시오. – alex

관련 문제