JS Deep Dive | 2021.12.15

invidia·2021년 12월 15일
0

TIL

목록 보기
5/29

12. 함수

정리

함수 정의

  • 함수는 인수(Argument)를 매개변수(Parameter)로 입력받아 반환값(Return value)를 출력한다.

  • 함수 리터럴: var fun = function func(arg1,arg2) { ... }

    • 함수 이름 생략이 가능하다.
    • 평가되어 값을 생성한다. (변수에 할당)
      • 즉 함수는 객체이다.
    • 표현식인 문이다.
  • 함수 선언문: function func(arg1,arg2) { ... }

    • 리터럴과 동일한 형태이다.
    • 표현식이 아닌 문이다.
    • 함수 선언문은 변수에 할당할 수 없으나, JS가 문맥에 따라 함수 리터럴로 해석하여 할당될 수 있다.
    • JS는 함수 이름을 호출하지 않고, 함수 객체를 가리키는 식별자를 호출한다.
      • 함수 선언문에서, 존재치 않는 식별자는 JS엔진이 함수 이름과 동일한 식별자를 암묵적으로 생성해준다.
  • 함수 표현식: 함수 리터럴로 생성한 함수 객체를 변수에 할당하는 방식

  • 함수 호이스팅: 함수 선언문을 런타임 이전에 실행하는 것

  • 함수 리터럴변수 호이스팅이 일어나므로, 표현식 선언 이전에는 undefined로 초기화된다.

함수 호이스팅은 함수 호출 이전에 함수 선언이 되어야 한다는 규칙에 위배되므로 함수 선언문 대신 함수 표현식 사용을 권장한다.

  • 화살표 함수
    • Ex) const fun = (args) => {...}
      • 여러 부분이 간략화 됨.

함수 호출

  • 매개변수보다 인자가 적으면 전달받지 않은 매개변수는 undefined로 초기화된다.

  • 매개변수보다 인자가 많으면 초과된 인자는 무시된다.

    • 모든 인자는 함수의 arguments 객체에 보관되므로 버려지는 것은 아니다.
  • 매개변수 기본값을 사용할 수도 있다.

    • function add(a=0,b=0,c=0) {return a+b+c;}
  • 함수는 한 가지 일만 하도록 해야함.

    • 매개변수의 개수는 최대 3개 이상 넘지 않을 것을 권장
    • 객체를 넘겨주는 것도 방법
      • 부수효과는 주의
  • 매개변수는 값의 복사와 같은 방식으로 전달되므로 원시 값값에 의한 전달, 객체참조에 의한 전달방식으로 동작한다.

    • 외부상태에 객체가 변경되는 것을 막기 위해 불변 객체로 만들어 사용할 수도 있다.
  • 즉시실행함수

    • (function() {. . .}()) 형태
    • 가장 바깥 쪽 ()는 그룹연산자로 해석되며 내부의 피연산자가 값으로 해석되므로 내부의 함수가 리터럴로 평가되는 원리이다.
  • 콜백함수: 매개변수로 전달받아, 다른 함수의 내부에서 실행되는 함수.

  • 고차함수: 그 때, 전달받은 함수.

  • 순수함수: 외부상태에 의존하지 않는 함수

  • 비순수함수: 외부상태에 의존하는 함수

    • 의존: 외부상태에 따라 반환값이 달라지거나, 외부상태를 변경하는 부수효과가 있다는 것을 의미
  • 함수형 프로그래밍

    • 순수함수와 보조함수와의 조합으로 부수효과를 최소화 -> 불변성
    • 조건문 & 반복문 제거 -> 복잡성 해결
    • 생명 주기 최소화 -> 오류 최소화

느낀점

  • 함수 선언문, 리터럴, 표현식 등에 대해 정확히 알지 못하였는데 각 용어들의 사전적 정의부터 선언 방법 & 호이스팅이 다르고 표현식이 더욱 선호된다는 것을 알게 되었다.
  • 함수형 프로그래밍의 철학에 대해 이해하였고, 철학을 실현하기 위한 개념 (순수함수, 매개변수의 복사) 를 배웠다.

0개의 댓글