모던JS딥다이브 읽기

:: 함수

함수는 일련의 절차를 문(statement)으로 구현하고 코드 블록으로 감싸서 실행 단위로 정의한 것이다. - p.155 -

::: 함수를 사용하는 이유

  • 코드 재사용 편리 => 유지 보수 편리 => 코드 신뢰성 상승
  • 함수 식별자를 통한 가독성 향상

::: 함수 정의하기

함수를 생성하는 방법은 여러가지다.

// 유형1: 함수 선언문
function add(x, y) {
  return x + y;
}

// 유형2: 함수 표현식
const add = function (x, y) {
  return x + y;
}

// 유형3: 생성자
var add = new Function('x', 'y', 'return x + y');

// 유형4: 화살표 함수
var add = (x, y) => x + y;

::: 함수의 중의성

  • {} 경우, JS 엔진은 코드 블록 또는 객체로 해석한다
  • 마찬가지로, JS엔진은 코드 문맥에 따라 동일한 함수 리터럴을 식 또는 문으로 다르게 해석한다

::: 일급객체

  • JS 함수는 값처럼 변수에 할당, 프로퍼티 값으로 사용, 배열의 요소로 사용하는 것이 가능하다
  • 즉 함수를 값처럼 자유롭게 사용할 수 있다

::: 함수 호이스팅

문으로 생성한 함수와 식으로 생성한 함수는 생성 시점이 다르다

:::: 호이스팅 비교하기 - var 키워드 변수와 함수문

  • 공통점은 런타임 이전에 식별자가 생성되는 점
  • var 키워드 변수는 undefined 초기화 수행
  • 문으로 생성한 함수는 함수 객체로 초기화 수행
  • 따라서 var 변수를 변수 선언문 이전에 참조하면 undefined 평가
  • 문으로 생성된 함수를 함수 선언문 이전에 참조하면 호출 가능

:::: 호이스팅 비교하기 - 변수와 함수식

  • 함수식은 변수에 할당되는 값이 함수 리터럴인 문
  • 변수처럼 런타임 이전에 undefined 초기화 수행
  • 변수처럼 런타임에 평가되어 할당문이 실행되는 시점에 함수 객체가 된다
  • 따라서 함수식은 변수 호이스팅이 발생

::: 순수함수

외부 상태를 변경하지 않고 외부 상태에 의존하지도 않는 함수 -p.177-

::: 재귀함수

함수가 자기 자신을 호출하는 것을 재귀 호출(recursive call)이라 한다 -p.179-

  • 반드시 탈출 조건을 만들어야 한다
  • 무한히 자기자신을 호출하면 stack overflow 발생

::: 콜백함수

함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백함수라고 한다 -p.184-

::: 고차함수

매개변수를 통해 함수의 외부에서 콜백 함수를 전달 받은 함수를 고차함수라고 한다 -p.184-

  • 고차함수는 콜백을 자신의 일부분으로 합성한다
  • 고차함수는 매개변수로 받은 콜백함수의 호출 시점을 결정하여 호출한다
  • 콜백함수는 고차함수에 의해 호출되며, 고차함수는 필요에 따라 콜백 함수에 인수를 전달한다
profile
사랑하는 사람들과 사랑받는 작품을 만들면서 살고 싶은 아저씨입니다.

0개의 댓글