[javascript] 즉각적인 함수 호출 구문

JSLint의 옵션, 사실 좋은 부분 중 하나는 건축 것을 의미한다 “즉시 호출 주위에 괄호 [필요한]을”는,

(function () {

  // ...

})();

대신 다음과 같이 작성해야합니다.

(function () {

  // ...

}());

내 질문은 이것이다. 누군가이 두 번째 양식이 더 나은 것으로 간주되는 이유를 설명 할 수 있습니까? 더 탄력적입니까? 오류가 덜 발생합니까? 첫 번째 형태에 비해 어떤 이점이 있습니까?


이 질문을하면서 함수 값과 함수 값을 시각적으로 명확하게 구분하는 것의 중요성을 이해하게되었습니다. 즉각적인 호출의 결과가 할당 표현식의 오른쪽 인 경우를 고려하십시오.

var someVar = (function () {

  // ...

}());

최 괄호 구문이 불필요하지만, 개구 괄호의 값이 할당되고 있다는 선행 표시가 제공 되지 함수 자체가 아니라 함수의 결과가 호출된다.

이것은 생성자 함수의 대문자 사용에 관한 Crockford의 조언과 유사합니다. 소스 코드를 보는 모든 사람에게 시각적 신호 역할을하기위한 것입니다.



답변

Douglass Crockford의 스타일 컨벤션 가이드에서 : ( “즉시 호출 됨”검색)

함수가 즉시 호출되어야하는 경우 전체 호출 표현식을 괄호로 래핑하여 생성되는 값이 함수 자체가 아니라 함수의 결과임을 명확히해야합니다.

그래서 기본적으로 그는 그것이 함수 값과 함수 값 사이의 구별을 더 명확하게한다고 느낍니다. 따라서 이것은 코드 자체의 실질적인 차이가 아니라 문체 문제입니다.

업데이트 된 참조, 이전 PPT가 더 이상 존재하지 않음


답변

즉시 호출 된 익명 함수는 다음과 같은 이유로 괄호로 래핑됩니다.

  1. 그것들은 함수 표현식이며 괄호를 생략하면 구문 오류 인 함수 선언으로 해석됩니다.

  2. 함수 표현식은 function이라는 단어로 시작할 수 없습니다.

  3. 함수 표현식을 변수에 할당 할 때 함수 자체가 반환되지 않고 함수의 반환 값이 반환됩니다., 따라서 괄호는 그 안에 무엇이 있는지 평가하고 값을 생성합니다.함수가 실행되고 후행 괄호로 ..}()인해 함수가 즉시 실행됩니다.


답변

또는 다음을 사용하십시오.

void function () {
...
} ()


답변