[모던자바스크립트 딥다이브] 12장 함수

2023. 7. 28. 23:53스터디/모던자바스크립트딥다이브

함수란

  • 수학의 함수 : 입력을 받아 출력을 내보내는 일련의 과정
  • 프로그래밍 언어의 함수 : 일련의 과정을 문으로 구분하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것
    • 매개변수 : 입력을 전달 받는 변수 (parameter)
    • 입력 : 인수 (argument)
    • 출력 : 반환값 (return value)
  • 함수 정의에 의해 생성
  • 함수 호출에 의해 실행되고 결과를 반환함

함수를 사용하는 이유

  • 코드의 재사용
    • 유지보수 유리
    • 코드의 신뢰성 향상
  • 함수 식별자명을 잘 지어야 한다 → 코드의 가독성 향상

함수 리터럴

function 키워드 + 함수이름 + 매개변수 목록 + 함수 몸체

  • 함수이름
    • 생략 가능, 기명함수, 익명함수
  • 매개변수 목록
    • 0개 이상
    • 순서대로 할당
  • 함수 몸체
    • 일괄적으로 실행될 문들을 하나의 실행 단위로 정의

함수 정의

자바스크립트 엔진은 함수를 호출하기 위해 함수 이름과 동일한 식별자를 암묵적으로 생성하고 함수 객체를 할당한다.

  1. 함수 선언문
    1. 함수 리터럴과 형태 동일
    2. 함수 이름 생략 불가
    3. 선언문 전에 호출 가능 (함수 호이스팅)
  2. 함수 표현식
    1. 함수 표현식으로 정의한 함수는 선언문 이전에 호출이 불가능하다. (변수 호이스팅)
      1. 변수에 할당하였기 때문에 변수 호이스팅에 의해 undefiend로 초기화 된 다음 런타임 시점에 평가되어 함수 객체가 되기 때문
  3. Function 생성자 함수
    1. 클로저를 생성하지 않는다.
  4. 화살표 함수 (ES6)
    1. 익명 함수
    2. this 바인딩 방식이 다름 ( 외부 스코프의 this를 그대로 바인딩함)
    3. arguments객체를 생성하지 않음
    4. prototype 프로퍼티가 존재하지 않음

함수 호출

  • 함수 식별자 + 함수 호출 연산자
  • 매개변수와 인수
    • 개수, 타입의 제한 없음
    • 매개변수의 스코프는 함수 몸체 내부
    • 매개변수 타입을 사전에 지정할 수 없다
    • 매개변수와 인수의 개수 일치여부 체크 하지 않음
      • 인수 < 매개변수 : 개수가 일치하지 않아서 해당 할당이 되지 않은 매개변수는 undefiend로 초기화된다.
      • 인수 > 매개변수 : 초과된 분에 대해 무시
    • 매개변수 기본값 지정(ES6)
    • function add (a = 0, b = 0) { return a + b } add(1,2) // 3 add(1) // 1 add() // 0
    • 매개변수 최대 개수 : 없음. 물리적 한계는 존재. 적을수록 좋으며 0개가 이상적
    • 반환문
      • 함수를 중단하고 몸체를 빠져나간다
      • 평과결과를 반환값으로 반환한다.
      • 함수 몸체에서만 사용 가능

참조에 의한 전달과 외부 상태의 변경

  • 객체가 함수의 매개변수로 주어질 경우 함수 내부에서 객체의 값을 변경할 경우 참조하고 있는 객체의 값이 변경되므로 추적하기가 어려워진다.
  • → 옵저버 패턴 등을 통해 객체 참조를 공유하는 모든이들에게 통지하고 대처할 것
  • → 객체를 불변 객체로 만들어서 사용할 것
  • → 최대한 순수함수를 사용하여 부수 효과를 방지할 것

다양한 함수의 형태

  1. 즉시 실행 함수
    • 함수 정의와 동시에 실행되는 함수, 단 한번만 호출되며 다시 호출 할 수 없다.
    • 익명함수를 주로 사용하나 기명함수도 사용 가능. 단, 기명함수이더라도 다시 호출 불가능
  2. 재귀 함수
    • 함수가 자기 자신을 호출 하는 것
    • 탈출조건을 반드시 포함해야함
    • for, while로 구현할 수 없는 경우에만 부분적으로 사용하는것을 권장
  3. 중첩 함수
    • 함수 내부에 정의 된 함수
    • 중첩 함수를 포함하는 함수 → 외부 함수
  4. 콜백 함수
    • 함수의 매개변수로 다른 함수를 전달할 때 전달되는 함수
    • 콜백 함수를 전달받은 함수 → 고차 함수
    • 콜백 함수는 고차 함수에 의해 호출 된다.
  5. 순수 함수와 비순수 함수
    • 순수 함수 → 외부 상태에 의존하지도 않고, 변경하지도 않는 함수
      • 오로지 매개 변수에만 의존하여 값을 생성하여 반환함
    • 비순수 함수 → 외부 상태에 의존하거나, 외부 상태를 변경하는 함수