문제

이있다 jslint 옵션, 실제로 좋은 부분 중 하나는 "즉시 호출을 중심으로 파렌을 필요로한다"는 것을 의미합니다.

(function () {

  // ...

})();

대신 작성해야합니다

(function () {

  // ...

}());

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


이 질문을 한 후, 나는 함수 값과 함수 값 사이에 명확한 시각적 구분을 갖는 것의 중요성을 이해하게되었습니다. 즉시 호출 결과가 과제 표현의 오른쪽 인 경우를 고려하십시오.

var someVar = (function () {

  // ...

}());

가장 바깥 쪽 괄호는 구문 적으로 불필요하지만 개방 괄호는 할당 된 값이 ~ 아니다 함수 자체가 아니라 기능이 호출되는 결과.

이는 생성자 기능의 대문자에 관한 Crockford의 조언과 유사합니다. 소스 코드를보고있는 사람에게는 시각적 신호 역할을합니다.

도움이 되었습니까?

해결책

Douglass Crockford 's에서 스타일 컨벤션 가이드: ( "즉시 호출"검색)

함수를 즉시 호출 해야하는 경우, 전체 호출 식을 파렌에 래핑하여 생성되는 값이 함수 자체가 아닌 함수의 결과임을 분명히해야합니다.

따라서 기본적으로 그는 함수 값과 함수 값의 차이를 더 분명하게 생각합니다. 따라서 그것은 스타일 문제이며, 실제로 코드 자체의 실질적인 차이는 아닙니다.

업데이트 된 참조, 오래된 PPT는 더 이상 존재하지 않습니다

다른 팁

즉시 익명 함수라고 불리는 기능은 다음과 같습니다.

  1. 그것들은 함수 표현식이며 파렌을 남겨두면 구문 오류 인 함수 선언으로 해석됩니다.

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

  3. 함수 표현식을 변수에 할당하면 함수 자체가 반환되지 않으며 함수의 리턴 값이 반환됩니다., 따라서 파렌은 내부의 내용을 평가하고 값을 생성합니다. 함수가 실행되고 후행 파렌스가 ..}() 기능이 즉시 실행됩니다.

또는 사용 :

void function () {
...
} ()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top