2009-03-22 2 views
5

익명 함수를 만든 다음 즉시 호출하고 싶습니다.JavaScript에서 이러한 종류의 함수 호출이 왜 잘못 되었습니까?

1) 구문 오류가 발생합니다. 왜?

function() 
{ 
    alert("hello"); 
}(); 

2) 함수 정의를()로 둘러 싸면 작동합니다.

(function() 
{ 
    alert("hello"); 
})(); 

3) 또는 익명 함수를 변수에 할당하십시오. 그것은 작동합니다.

var dummy = function() 
{ 
    alert("hello"); 
}(); 

왜 첫 번째 방법이 작동하지 않습니까?

+0

그래서 분명히 구문 오류가 아닙니다. – karim79

+0

sth이 말한 것처럼 구문 오류입니다. – olliej

답변

12

ECMAScript Language Specification은 12.4 절은 말합니다 : 그 가 FunctionDeclaration와는 모호 할 수 있기 때문에

ExpressionStatementfunction 키워드로 를 시작할 수 없습니다.

따라서 언어의 모호함을 유발할 수 있으므로 사례 1은 허용되지 않습니다. 다른 경우에는 문제가되지 않는 다른 종류의 구문 (ExpressionStatement)이 있으므로 구문이 허용됩니다.