2017-10-04 10 views
1

중복 된 질문을 게시하는 것에 대해 사과드립니다. (비슷한 제목의 질문이 여기에 있습니다.) 이미 제시된 질문 중 아무 것도 내 사례에 맞지 않는 것 같습니다. 이 JavaScript 스 니펫에서 콜론은 무엇을 의미합니까 (객체 리터럴이 아님)?

<script> 
    'use strict'; 
    foo: 1; 

    //whatever else 
</script> 

내가 구문 오류가 수 있도록이되어 있지만, 그렇지 않다 : 콜론은 무엇을 한마디로

은 여기에서. 그리고 그것은 레이블이 아니기 때문에, break foo;Uncaught SyntaxError: Undefined label 'foo'을 던지기 때문에 (이것은 a doc page이 정확히 제시하고 있는데, 레이블이라는 것을 의미하기 때문입니다.)

최근에 콜론 사용에 대해 들어 본 적이 없기 때문에 이것이 JavaScript 구문에 최근에 추가 된 것으로 생각됩니다. 사람이 궁금해하는 경우


, 나는이 부탁 해요 왜이 내 설명입니다 : 내가 an MDN doc page을 읽고 있었다 및 예제가있다 :

var func =() => { foo: 1 };    
// Calling func() returns undefined! 

그것은, 표시는이 경우 중괄호 객체 구분자가 아닌 블록 구분자로 취급됩니다. 그래서 나는 어떻게 든 foo: 1은 구문 상으로 합법적이어야한다고 생각합니다. 그리고 실제로 그렇습니다.

a question이 있는데, JavaScript로 콜론을 사용할 때마다이를 처리 할 예정이지만,이 점에 대해서는 언급하지 않았으며 이에 대한 답변도 없습니다.

+1

라벨인지 확인하십시오. 나는'foo'가 당신이 깰 수있는 루프가 아니기 때문에 당신이'break foo; '라는 에러를 가지고 있다고 의심합니다. – Andy

+1

왜 downvote? 남자는 화살 기능을 모른다, 그는 이해를 시도하고, 청결한 질문을 질문하고 명확한 응답을 얻었다. – DanteTheSmith

답변

3

링크 된 페이지를 자세히 읽은 경우, 왜 그렇게 쓰여졌는지 알 수 있습니다.

var func =() => { foo: 1 }; 

이것은 화살표 기능에서 개체를 반환하려는 시도입니다. 이유로 작동하지 않습니다

은 여기에서 설명 :

This is because the code inside braces ({}) is parsed as a sequence of statements (i.e. foo is treated like a label, not a key in an object literal). (source)

따라서 반환 값은 괄호에 싸여 할 필요가 :

var func =() => ({foo: 1}); 

실제로 귀하의 질문에 대답하려면

라벨입니다.

foo: 1을 컨텍스트에서 제외 할 수는 없습니다.

+0

나는 질문을 게시 한 후에 실제로 그것을 더 읽었다. 네, 아마 파이어 폭스가 그것에 던지지 않기 때문에 라벨입니다. 아마 그것은 Chrome과 관련된 몇 가지 문제 일 것입니다. – user907860

+1

_ "아마도 라벨입니다"_ 아니요, 아마 ". 그것은 _ 라벨입니다. ;-) 이것은 "문제"가 아닙니다. 이것은 예상대로 작동합니다. – Cerbrus

+0

"문제"에 의해 내가 의미하는 Chrome은 합법적 인 구문 인 경우이 문제를 일으키지 않을 것입니다. – user907860