기능

2012-10-10 3 views
3

이유는이 구문 오류를 반환 않습니다기능

function(foo){console.log(foo)} 

나는이 때문에, 함수의 값을 반환 자체를 반환, 그리고 아무것도에 할당 할 것으로 예상 싶지만 내가 얻을 "구문 에러 : 예기치 않은 토큰 ("

하지만이 작동합니다.

(function(foo){console.log(foo)}) 

그 포장 괄호 역할을 어떤 목적으로 설명해주십시오 나는 괄호는 t에서 "가독성을 증가"하는 데 사용되지만 것을 들었다 그의 경우 분명히 더 많은 목적이 있습니다.

about()에 대한 사용법에 대해 자세히 설명해 주실 수 있습니까? 해당 코드 행을 산문으로 번역한다고 가정 할 때,()는 어떻게 읽습니까? 나는이 개념을 다른 사람들에게 설명하려고 노력하고 있으며, 모든 사람이 이해할 수 있도록 그 의미를 전달해야한다. 내가 대답하려고하는 질문은,()의 의미는 무엇입니까? 그들은 의미 론적 가치를 지니고 있으며, 그것은 무엇입니까? ()으로 것은 expression 동안 ()없이 function(){} 줄하는 function declaration 때문에

+0

첫 번째 예에서는 식별자가 없습니다.두 번째 예제에서는 괄호로 묶을 때 표현 함수를 만듭니다. – fcalderan

답변

6

첫 번째 예는 함수 선언입니다 :이 같은 조각 작품 있도록

함수 선언은, 이상한 짐승, 그들이 코드 실행하기 전에 에 정의 된 범위 내에서 모든 곳에서 사용할 수 있습니다 . 구문 오류 인 식별자가 없습니다. 여기에 grammar for a function declaration (식별자는 선택 사항이 아니라고 통지)입니다 :

FunctionDeclaration :

functionIdentifier(FormalParameterListopt) {FunctionBody}

괄호에 포장함으로써이 기능 표현 (익명의 하나)으로 변환합니다. 괄호가 설정하는 방법

FunctionExpression :

functionIdentifieropt(FormalParameterListopt) {FunctionBody}


: 여기에 함수 표현식에 대한 gammar (지금 식별자는 선택 사항입니다)의

(function(foo){console.log(foo)})("hello"); //Will log 'hello' 

: 당신은 이후에 호출 한 쌍의 괄호를 추가하여 실행할 수 있습니다 함수 선언으로 함수 선언

이 경우 괄호는 "grouping operator ".

PrimaryExpression :

(Expression)

그룹화 연산자는 표현식을 포함 할 수 있습니다, 그래서 당신의 함수는 식보다는 선언 (분명히, 정확한 예에서, 기능 수 '로 해석되는 다음과 같이 그룹화 연산자에 대한 문법은 식별자가 없으므로 선언이 아닙니다).

+0

제임스 감사합니다! 하지만 나는 여전히()의 부분을 놓치고 있습니다. 그들은 조작의 우선 순위 (1 + 1) * 2를 변경하고 선언을 표현식으로 변경할 수있는 신비한 힘을 가진 것처럼 보입니다. 두 경우를 어떻게 구별합니까? 거기에 charachteristic 멀리주고, 또는 어떻게 작동합니까? – DLeonardi

+0

@ user436118 - 환영합니다 :) 편집을 확인하십시오. 괄호로 선언을 표현식으로 바꾸는 방법에 대해 조금 추가했습니다. –

+0

+1 아름다운 설명 – techfoobar

2

이다.

foo(); 
function foo() { console.log('foo'); } 
+0

"괄호 주위의 질문"이라는 제목의 표준 부분을 확인하십시오. http://dmitrysoshnikov.com/ecmascript/chapter-5functions/#question- 약 둘러싼 괄호] – complex857