함수란?
- 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것.
- 함수 정의를 통해 생성.
함수 표현식
- 자바 스크립트의 함수는 객체타입의 값. 즉 일급 객체
- 일급 객체이므로 함수 리터럴로 생성한 함수 객체를 변수에 할당할 수 있다.
함수 생성 시점과 함수 호이스팅
- 함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있다. (호이스팅)
- 하지만 함수 표현식으로 정의한 함수는 이전에 호출 불가능. 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점이 다르기 때문.
- 변수 선언은 런타임 이전에 실행되어 undefined로 초기화 된다. 함수 표현식의 함수 리터럴은 할당문이 실행되는 시점에 평가되기 때문에 이전에 호출 불가능.
- 따라서 함수 표현식으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아니라 변수 호이스팅이 발생
매개변수의 최대 개수
- 매개변수는 순서에 의미가 있다. 따라서 많이 사용하면 인수의 순서를 고려해야 한다.
- 그러므로 변수가 많아지면 유지보수성이 나빠진다.
- 이상적인 매개변수의 개수는 0개이고, 적을수록 좋다
- 따라서 매개변수는 최대 3개를 넘지 않는 것이 좋고, 많은 매개변수가 필요하다면 객체로 생성해 순서를 신경쓰지 않게 하는 것이 좋다.
- 주의할 것은 함수 내부로 전달한 객체를 변경하면 외부의 객체가 변경되는 부수 효과(side effect)가 발생한다.
참조에 의한 전달과 외부 상태의 변경
- 원시값은 값에 의한 전달. 객체는 참조에 의한 전달. 매개변수도 동일하게 작동한다.
- 따라서 객체 타입을 매개변수로 전달하면 부수 효과가 발생할 수 있기 때문에 객체를 불변 객체로 만들어 사용해야 한다. (방어적 복사를 통해 원본 객체를 완전히 복제)
- 순수 함수를 통해 부수 효과를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높히는 프로그래밍 패러다임을 함수형 프로그래밍이라 한다.
'기술 서적 > 하루 30분 모딥다' 카테고리의 다른 글
하루 30분 모던 자바스크립트 딥 다이브. let, const 키워드 (0) | 2023.06.16 |
---|---|
하루 30분 모던 자바스크립트 딥 다이브. 전역 변수의 문제 (0) | 2023.06.14 |
하루 30분 모던 자바스크립트 딥 다이브. 스코프 (0) | 2023.06.08 |
하루 30분 모딥다. 어트리뷰트 (0) | 2023.06.01 |
하루 30분 모딥다. DOM 조작 (0) | 2023.05.31 |