상상할 수 있듯이 익명 함수를 즉시 실행하는 방법에는 여러 가지가 있습니다. 요약하면 세 가지 일반적인 방법이 있습니다(다른 방법도 있으므로 알려주십시오).
방법 1
(기능() {
//…
})();
방법 2
무효 함수() {
//…
}();
방법 3
~함수() {
//…
}();
방법 1과 방법 2를 보셨을 것입니다. 여기서는 방법 3을 위주로 설명하겠습니다. 세 번째 방법을 설명하기 전에 이제 EMCAScript(제5판 72페이지)의 연산자 "~"(비트 부정) 정의를 검토합니다.
명령문을 연산자와 결합하여 이전 값을 32비트 정수로 변환합니다. 연산자 뒤의 명령문을 실행하고 행을 변환하여 결과가 32비트 정수로 반환됩니다.
위에서 알 수 있듯이 실제로 비트 연산자는 다음 표현식의 값을 즉시 반환할 수 있습니다. 실제로 다른 비트 연산자를 사용하여 이 목적을 달성할 수 있습니다. 예를 들면 다음과 같습니다.
!기능() {
//…
}();
등이 우리의 목표를 달성할 수 있습니다. 따라서 실제로 "~"를 사용하는 다른 이유는 없습니다. 단지 코드가 "좋아 보인다"는 것뿐입니다. ^)
효율성은 세 가지 방식으로 익명 함수를 실행하는 효율성보다는 각 연산자의 실행 효율성을 직접 분석하는 것이 더 좋습니다. 그럼 EMCA 규격의 “()”와 “void”의 정의를 비교하여 살펴보도록 하겠습니다.
그룹 운영자(제5판, 66페이지)
표현식의 실행 결과를 반환합니다.
무효(5판 70페이지)
명령문과 연산자를 결합하면 정의되지 않은 결과가 반환됩니다.
그룹 연산자도 명령문을 실행하고 명령문 블록에서 반환된 값을 반환해야 하므로 void에 비해 명령문 블록을 얻기 위해 여러 작업이 필요하므로(성능을 많이 소비하지는 않지만) 이 경우 성능은 void 가 그룹 연산자보다 낫습니다.
두 가지를 비교하면 세 번째 방법의 성능 비교는 처음 두 가지 방법보다 분명히 낮습니다. 요약하면, 문법적인 관점에서 위의 세 가지 익명 함수 메서드 중 방법 2가 방법 1보다 낫고 방법 3이 가장 효율적이지 않습니다.
세 가지의 장점을 요약하고 생각해 보세요.
방법 1은 매우 일반적이고 안전하므로 이 방법을 사용하는 것에 대해 누구도 비난하지 않습니다. 그러나 방법 1을 사용하는 학생들은 종종 대괄호 일치를 잊어버리는 "문제"를 일으킬 수 있습니다(특히 명령문 블록이 매우 긴 경우). 종종 틀려요)
익명 함수를 실행하기 위해 비트 연산자를 사용하는 것은 매우 유행하며 보기 좋게 사용됩니다. 많은 IDE(예: IDEA) 및 구문 강조 도구는 세 번째 작성 방법을 지원하지 않습니다.
void가 가장 효율적이지만 다른 두 구현에 비해 항상 매우 부풀어 오른 느낌이 듭니다(단지 몇 글자만 더?).
그래서
코드의 양과 효율성을 고려하면, 추가 코드를 저장해야 하는 극단적인 경우에는 방법 1을 사용하는 것이 맞고, 효율성을 우선시하려면 방법 3을 사용하는 것이 좋습니다. 그러면 여기서는 방법 2의 사용에 대해 설명하겠습니다. 실제로 세 가지 방법의 효율성 차이는 매우 작습니다. 따라서 효율성에만 기반하여 해당 방법을 사용하는 것은 거의 불가능합니다.
구체적인 채택방안은 실제 상황을 토대로 고려해야 한다. 예를 들어 3번 방법을 자주 사용하는 이유는 1. 편리함(한 글자만 추가하면 됨) 2. 함수가 길면 괄호 매칭이 어지러워지기 때문이다 3. 사용하기는 좋은데 3번 방법이 자주 눈에 들어오게 만든다 코드팀원들 고민하다.
일부 클래스 라이브러리 등 프레임워크 기반 기본 코드가 있는 경우 방법 1을 사용하는 것이 가장 안전하고 누구나 쉽게 이해할 수 있으므로 가장 안전한 선택입니다.
[원본: http://www.gracecode.com/archives/3004/ 아주 좋습니다. 누구나 배울 수 있습니다.