하루 30분 모던 자바스크립트 딥 다이브. 함수

함수란?

  1. 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것.
  2. 함수 정의를 통해 생성.

함수 표현식

  1. 자바 스크립트의 함수는 객체타입의 값. 즉 일급 객체
  2. 일급 객체이므로 함수 리터럴로 생성한 함수 객체를 변수에 할당할 수 있다.

함수 생성 시점과 함수 호이스팅

  1. 함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있다. (호이스팅)
  2. 하지만 함수 표현식으로 정의한 함수는 이전에 호출 불가능. 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점이 다르기 때문.
  3. 변수 선언은 런타임 이전에 실행되어 undefined로 초기화 된다. 함수 표현식의 함수 리터럴은 할당문이 실행되는 시점에 평가되기 때문에 이전에 호출 불가능.
  4. 따라서 함수 표현식으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아니라 변수 호이스팅이 발생

매개변수의 최대 개수

  1. 매개변수는 순서에 의미가 있다. 따라서 많이 사용하면 인수의 순서를 고려해야 한다.
  2. 그러므로 변수가 많아지면 유지보수성이 나빠진다.
  3. 이상적인 매개변수의 개수는 0개이고, 적을수록 좋다
  4. 따라서 매개변수는 최대 3개를 넘지 않는 것이 좋고, 많은 매개변수가 필요하다면 객체로 생성해 순서를 신경쓰지 않게 하는 것이 좋다.
  5. 주의할 것은 함수 내부로 전달한 객체를 변경하면 외부의 객체가 변경되는 부수 효과(side effect)가 발생한다.

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

  1. 원시값은 값에 의한 전달. 객체는 참조에 의한 전달. 매개변수도 동일하게 작동한다.
  2. 따라서 객체 타입을 매개변수로 전달하면 부수 효과가 발생할 수 있기 때문에 객체를 불변 객체로 만들어 사용해야 한다. (방어적 복사를 통해 원본 객체를 완전히 복제)
  3. 순수 함수를 통해 부수 효과를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높히는 프로그래밍 패러다임을 함수형 프로그래밍이라 한다.