그들은 함수 선언보다 유연합니다. 함수 표현식을 생성하고 다른 변수에 할당 할 수 있습니다. 이는 다른 위치에서 동일한 함수를 사용해야 할 때 유용합니다.
기능 표현식은 홍보되지 않으므로 코드에서 정의하기 전에 사용할 수 없습니다. 기능을 정의한 후에 만 사용하려면 도움이됩니다.
언제 함수 선언과 함수 표현식을 선택 해야하는지
대부분의 경우, 귀하의 요구에 가장 적합한 기능을 정의하는 방법을 쉽게 결정할 수 있습니다. 이 지침은 대부분의 경우 신속하게 결정을 내리는 데 도움이됩니다.
다음 경우 기능 선언 사용 :
더 읽기 쉽고 이해할 수있는 기능 (예 : 긴 기능 또는 다른 위치에서 사용하는 기능)이 필요합니다.
익명 함수는 귀하의 요구에 적합하지 않습니다
재귀 함수를 만들어야합니다
함수를 정의하기 전에 호출해야합니다
-
다음 경우 기능 표현식 사용 :
더 유연한 기능이 필요합니다
로 승진하지 않는 함수가 필요합니다
이 함수는 정의 된 경우에만 사용해야합니다
이 함수는 익명이거나 미래에 이름이 필요하지 않습니다 -
는 기능 표현식을 즉시 호출하는 것과 같은 기술을 사용하여 함수의 실행 시간을 제어하려고합니다 (iife)
당신은 다른 함수로 인수로 함수를 전달하려고합니다
-
즉, 많은 경우에 기능 표현의 유연성이 강력한 이점이됩니다.
기능 표현식의 잠재력 : javaScript는 차이를 향상시킵니다
기능 선언보다 더 유용한 기능 표현 방법에는 여러 가지가 있습니다.
닫는
다른 기능의 주장
함수 표현식을 즉시 호출하십시오 (iife)
-
함수 표현식을 사용하여 클로저를 만듭니다
클로저를 실행하기 전에 매개 변수를 함수로 전달하려면 클로저를 사용할 수 있습니다. 노드리스트를 통해 반복 할 때 이것이 어떻게 혜택을 받는지에 대한 좋은 예입니다.
클로저를 사용하면 함수가 실행 된 후 정보를 사용할 수없는 경우 인덱스와 같은 추가 정보를 유지할 수 있습니다. -
추가 이벤트 핸들러는 나중에 (루프 종료 후) 실행되므로 루프의 적절한 값을 보존하려면 폐쇄가 필요합니다. -
루프에서 - 함수를 추출하여 문제가 발생하는 이유를 이해하는 것이 더 쉽습니다.
-
여기서 솔루션은 인덱스를 함수 매개 변수로 외부 함수로 전달하여 값을 내부 함수로 전달할 수 있도록하는 것입니다. 일반적으로 핸들러 기능을 사용하여 내부 반환 기능을 구성하는 데 필요한 정보가 표시됩니다.
-
패키지 폐쇄 및 사용법에 대해 자세히 알아보십시오.
매개 변수로 함수 표현식을 전달합니다
기능 표현은 중간 임시 변수에 값을 할당 할 필요없이 함수로 직접 전달 될 수 있습니다.
당신은 그것들을 익명 기능의 형태로 가장 자주 보게됩니다. jQuery 함수 표현식의 친숙한 예는 다음과 같습니다.
기능 표현식은 와 같은 메소드를 사용할 때 배열 항목을 처리하는 데 사용됩니다.
그들은 또한 이름이없는 익명 기능 일 필요가 없습니다. 기능 표현을 지명하여 기능이 무엇을 해야하는지 표현하고 디버그를 도와주는 것이 가장 좋습니다.
함수 표현식을 즉시 호출하십시오 (iife)
iife는 기능과 변수가 글로벌 범위에 영향을 미치는 것을 방지하는 데 도움이됩니다.
그 안의 모든 속성은 익명 함수의 범위 내에 있습니다. 이것은 다른 곳에서 코드에서 예상치 못한 또는 바람직하지 않은 부작용을 방지하는 일반적인 패턴입니다.
쉽게 유지 관리되는 섹션에 코드 블록을 포함하는 모듈 모드로도 사용됩니다. 우리는 JavaScript 폐쇄, 콜백 및 iife의 미스터리를 밝혀내는 데 더 심층적 인 것을 탐구합니다.
이것은 iife의 간단한 예입니다 : <code class="language-javascript">function funcDeclaration() {
return '函数声明';
}
let funcExpression = function () {
return '函数表达式';
}</code>
… 모듈로 사용하면 코드를 쉽게 유지할 수 있습니다.
<code class="language-javascript">function myFunction() {
// 执行某些操作
};</code>
결론
우리가 볼 수 있듯이 함수 표현식은 기능 선언과 근본적으로 다르지 않지만 종종 더 깨끗하고 읽기 쉬운 코드를 생성 할 수 있습니다.
그들은 널리 사용되므로 모든 개발자 도구 상자의 필수 부분이됩니다. 위에서 언급하지 않은 흥미로운 방식으로 코드에서 기능 표현을 사용하고 있습니까? 의견에 알려주세요!
함수 표현 및 함수 선언에 대한 FAQ (FAQ)
함수 표현과 함수 선언의 주요 차이점은 무엇입니까?
함수 표현식과 함수 선언의 주요 차이점은 JavaScript 엔진이 해석하는 방식입니다. 함수 선언은 코드가 실행되기 전에 구문 분석됩니다. 즉, 코드 후반에 선언 된 함수를 호출 할 수 있습니다. 이것을 기능 리프팅이라고합니다. 반면에, 기능 표현은 홍보되지 않으므로 정의 전에 호출 할 수 없습니다.
기능 선언 및 기능 표현의 예를 제공 할 수 있습니까?
물론 여기에 각각의 예가 있습니다.
함수 선언 :
함수 표현 :
코드 전체에서 사용될 함수를 만들어야 할 때는 기능 선언이 일반적으로 범위 상단으로 홍보되기 때문에 사용됩니다. 즉, 코드에서 선언하기 전에 함수를 호출 할 수 있습니다. 반면에 함수 표현식은 일반적으로 한 번 또는 한 번만 한 번만 필요한 함수에 사용되거나 함수가 다른 함수에 대한 인수로 전달 될 때 사용됩니다.
기능 표현이 명명 될 수 있습니까?
예, 함수 표현식을 명명 할 수 있습니다. 기능 이름이 스택 트레이스에 나타나기 때문에 디버깅에 매우 유용합니다. 예는 다음과 같습니다.
기능 개선이란 무엇입니까?
JavaScript의 기능 프로모션은 컴파일 단계 (코드가 실행되기 전) 동안 함수 선언이 포함 된 범위의 상단으로 이동하는 동작입니다. 즉, 코드에서 선언하기 전에 함수를 호출 할 수 있습니다. 그러나 함수 표현식 (변수에 할당 된 표현조차도)은 홍보되지 않습니다.
즉시 (iife)라고 불리는 함수 표현식은 무엇입니까?
기능 표현식을 즉시 호출 (IIFE)은 정의 직후에 실행되는 함수 표현식입니다. iife의 구문은 다음과 같습니다
함수 표현식 및 함수 선언을 상호 교환 적으로 사용할 수 있습니까?
기능 표현 및 기능 선언은 일반적으로 상호 교환 적으로 사용되지만 몇 가지 주요 차이점이 있습니다. 함수 선언이 촉진되므로 선언 전에 호출 할 수 있습니다. 반면에, 기능 표현은 홍보되지 않으므로 정의 전에 호출 할 수 없습니다. 또한 함수 표현식은 익명이거나 명명 될 수 있지만 함수 선언은 항상 이름을 지정해야합니다. <code class="language-javascript">function add(a, b) {
return a + b;
};</code>
함수 표현식 사용의 장점은 무엇입니까?
기능 표현은 몇 가지 장점을 제공합니다. 익명이 될 수 있고, 자체적으로 자체적으로 설정할 수 있으며 (즉시 호출 함수 표현식) 변수에 할당되어 통과 할 수 있습니다. 이로 인해 기능 표현은 클로저 및 콜백 기능으로 사용하기에 매우 적합합니다.
기능 표현과 함수 선언 사이에 성능 차이가 있습니까?
일반적으로 함수 표현식과 함수 선언의 성능 차이는 무시할 수 있으며 JavaScript 코드의 성능에 영향을 미치지 않을 것입니다. 기능 표현 및 기능 선언 선택은 특정 사용 사례 및 코딩 스타일 기본 설정을 기반으로해야합니다.
기능 표현이 클로저로 사용될 수 있습니까?
예, 기능 표현은 종종 JavaScript에서 클로저를 만드는 데 사용됩니다. 클로저는 자체 범위, 외부 함수의 범위 및 글로벌 범위에 액세스 할 수있는 함수입니다. 다음은 기능 표현식을 사용하여 생성 된 예제 폐쇄입니다.