var에 함수를 할당하면 어떤 이점이 있습니까?


답변:


8

내가 생각하는 짧은 대답은 단순히 명명 된 함수를 사용하여 변수에 할당 된 익명 함수를 만드는 것입니다 ...

    function sum() {}

차이점을 확인하는 좋은 방법은 .ToString ()을 호출하여 차이점을 확인하거나 console.log (sum.name)을 수행하는 것입니다. 하나는 실제 이름을, 다른 하나는 익명 함수 (var에 지정된 함수)를 제공합니다. var sum = function () {}이 런타임에 정의되고 sum () {} 함수가 구문 분석 시간에 정의되는 것과 같은 세부 사항도 있습니다.


마지막 문장에서 의미하는 것은 var로 정의 된 위의 이전 줄에서 sum ()을 호출하려고하면 오류가 발생한다는 것입니다. 내 대답과 같이 정의되면 호출이 함수 위에 있었더라도 오류가 없습니다.
harmonickey

12
차이점을 설명 하지만 이점을 설명하지는 않습니다 .
Keith Thompson

구문 분석 시간과 런타임의 차이점은 무엇입니까?
Wern Ancheta

1
명명 된 함수와 관련이없는 경우에도 명명 된 함수를 변수에 할당 할 수 있습니다.
Juan Mendes

5

한 가지 장점은 블록에서 함수 선언을 사용할 수 없다는 것입니다. 파일의 최상위 레벨에 있거나 다른 기능 내에 직접있을 수 있습니다.

if (true) {
  function foo() {}
}
try {
  function foo(){}
}
switch (true) {
  default:
    function foo(){}
}

이들은 모두 표준에 의해 지정되어 있지 않으며 브라우저는 다른 작업을 수행합니다 ( https : //.com/questions/10069204/function-declarations-inside-if-else-statements 참조) . 따라서 다른 스타일을 사용해야하는 경우 일관성을 유지하기 위해 항상

또한, 나는 이것에 대해 확신하지 못하지만 올바르게 기억한다면 일부 오래된 축소 기는 함수 선언을 처리하기에 충분히 똑똑하지 않고 이름을 바꾸지 않습니다.


3

저는 자바 스크립트 전문가가 아니므로 소금 한 덩어리로 섭취하십시오. 어떤 경우에는 사람들이 스타일을 위해 그것을 할 수 있다고 생각하고 단순히 "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() {...}

0

차이가 나타나는 유일한 상황 (모든 선언을 끝내기 전에 일부 함수 호출; toString 메서드 사용)이 내 의견으로는 일종의 모퉁이 경우이기 때문에 그것은 주로 스타일의 문제입니다.

var =스타일을 지원한다고 들었던 주장 중 하나는 일반 변수를 선언하는 방식과 일치한다는 것입니다. 이것은 사용하는 언어 기능의 수를 제한하고 Javascript를 처음 접하는 사람에게 프로그램을보다 쉽게 ​​도입 할 수있게합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.