답변:
내가 생각하는 짧은 대답은 단순히 명명 된 함수를 사용하여 변수에 할당 된 익명 함수를 만드는 것입니다 ...
function sum() {}
차이점을 확인하는 좋은 방법은 .ToString ()을 호출하여 차이점을 확인하거나 console.log (sum.name)을 수행하는 것입니다. 하나는 실제 이름을, 다른 하나는 익명 함수 (var에 지정된 함수)를 제공합니다. var sum = function () {}이 런타임에 정의되고 sum () {} 함수가 구문 분석 시간에 정의되는 것과 같은 세부 사항도 있습니다.
한 가지 장점은 블록에서 함수 선언을 사용할 수 없다는 것입니다. 파일의 최상위 레벨에 있거나 다른 기능 내에 직접있을 수 있습니다.
if (true) {
function foo() {}
}
try {
function foo(){}
}
switch (true) {
default:
function foo(){}
}
이들은 모두 표준에 의해 지정되어 있지 않으며 브라우저는 다른 작업을 수행합니다 ( https : //.com/questions/10069204/function-declarations-inside-if-else-statements 참조) . 따라서 다른 스타일을 사용해야하는 경우 일관성을 유지하기 위해 항상
또한, 나는 이것에 대해 확신하지 못하지만 올바르게 기억한다면 일부 오래된 축소 기는 함수 선언을 처리하기에 충분히 똑똑하지 않고 이름을 바꾸지 않습니다.
저는 자바 스크립트 전문가가 아니므로 소금 한 덩어리로 섭취하십시오. 어떤 경우에는 사람들이 스타일을 위해 그것을 할 수 있다고 생각하고 단순히 "function sum () {...}"을 작성함으로써 같은 일을 달성 할 수 있다고 생각합니다
그러나 함수를 변수에 할당하는 것은 함수형 프로그래밍에서 매우 강력한 기술입니다. OOP에 익숙하다면 다형성과 다소 유사합니다. Animal 기본 클래스와 Cat / Dog 파생 클래스의 고전적인 예를 생각해보십시오. Animal에서 작동하는 코드를 작성할 수 있지만 함수를 호출하면 해당 함수는 인스턴스 유형에 따라 다른 작업을 수행 할 수 있습니다.
함수형 프로그래밍에서는 "함수"와 함께 작동하는 알고리즘을 사용할 수 있지만 변수를 사용하여 해당 함수를 호출하는 경우 런타임시 다른 함수를 유연하게 할당 할 수 있습니다.
예를 들어, 창에 500 픽셀 밖에되지 않는 10,000 개의 데이터 포인트를 표시하는 알고리즘을 작성한다고 가정 해 봅시다. 그런 다음 각 픽셀은 20 개의 데이터 포인트를 나타내며이를 나타내려면 해당 20 개의 데이터 포인트를 단일 값으로 집계해야합니다.
따라서 10,000 포인트를 나타내는 알고리즘을 정의하고이 알고리즘은 다음과 같이 집계라는 함수 변수를 사용한다고 가정 해 보겠습니다.
...
displayValue = aggregate( numbersInOnePixel );
...
이제 런타임시 사용자는 데이터 집계 방법을 선택할 수 있습니다. 실제 함수 변수는 다음 중 하나 일 수 있습니다.
aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}