[모던자바스크립트 딥다이브] 12장 함수
2023. 7. 28. 23:53ㆍ스터디/모던자바스크립트딥다이브
함수란
- 수학의 함수 : 입력을 받아 출력을 내보내는 일련의 과정
- 프로그래밍 언어의 함수 : 일련의 과정을 문으로 구분하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것
- 매개변수 : 입력을 전달 받는 변수 (parameter)
- 입력 : 인수 (argument)
- 출력 : 반환값 (return value)
- 함수 정의에 의해 생성
- 함수 호출에 의해 실행되고 결과를 반환함
함수를 사용하는 이유
- 코드의 재사용
- 유지보수 유리
- 코드의 신뢰성 향상
- 함수 식별자명을 잘 지어야 한다 → 코드의 가독성 향상
함수 리터럴
function 키워드 + 함수이름 + 매개변수 목록 + 함수 몸체
- 함수이름
- 생략 가능, 기명함수, 익명함수
- 매개변수 목록
- 0개 이상
- 순서대로 할당
- 함수 몸체
- 일괄적으로 실행될 문들을 하나의 실행 단위로 정의
함수 정의
자바스크립트 엔진은 함수를 호출하기 위해 함수 이름과 동일한 식별자를 암묵적으로 생성하고 함수 객체를 할당한다.
- 함수 선언문
- 함수 리터럴과 형태 동일
- 함수 이름 생략 불가
- 선언문 전에 호출 가능 (함수 호이스팅)
- 함수 표현식
- 함수 표현식으로 정의한 함수는 선언문 이전에 호출이 불가능하다. (변수 호이스팅)
- 변수에 할당하였기 때문에 변수 호이스팅에 의해 undefiend로 초기화 된 다음 런타임 시점에 평가되어 함수 객체가 되기 때문
- 함수 표현식으로 정의한 함수는 선언문 이전에 호출이 불가능하다. (변수 호이스팅)
- Function 생성자 함수
- 클로저를 생성하지 않는다.
- 화살표 함수 (ES6)
- 익명 함수
- this 바인딩 방식이 다름 ( 외부 스코프의 this를 그대로 바인딩함)
- arguments객체를 생성하지 않음
- prototype 프로퍼티가 존재하지 않음
함수 호출
- 함수 식별자 + 함수 호출 연산자
- 매개변수와 인수
- 개수, 타입의 제한 없음
- 매개변수의 스코프는 함수 몸체 내부
- 매개변수 타입을 사전에 지정할 수 없다
- 매개변수와 인수의 개수 일치여부 체크 하지 않음
- 인수 < 매개변수 : 개수가 일치하지 않아서 해당 할당이 되지 않은 매개변수는 undefiend로 초기화된다.
- 인수 > 매개변수 : 초과된 분에 대해 무시
- 매개변수 기본값 지정(ES6)
function add (a = 0, b = 0) { return a + b } add(1,2) // 3 add(1) // 1 add() // 0
- 매개변수 최대 개수 : 없음. 물리적 한계는 존재. 적을수록 좋으며 0개가 이상적
- 반환문
- 함수를 중단하고 몸체를 빠져나간다
- 평과결과를 반환값으로 반환한다.
- 함수 몸체에서만 사용 가능
참조에 의한 전달과 외부 상태의 변경
- 객체가 함수의 매개변수로 주어질 경우 함수 내부에서 객체의 값을 변경할 경우 참조하고 있는 객체의 값이 변경되므로 추적하기가 어려워진다.
- → 옵저버 패턴 등을 통해 객체 참조를 공유하는 모든이들에게 통지하고 대처할 것
- → 객체를 불변 객체로 만들어서 사용할 것
- → 최대한 순수함수를 사용하여 부수 효과를 방지할 것
다양한 함수의 형태
- 즉시 실행 함수
- 함수 정의와 동시에 실행되는 함수, 단 한번만 호출되며 다시 호출 할 수 없다.
- 익명함수를 주로 사용하나 기명함수도 사용 가능. 단, 기명함수이더라도 다시 호출 불가능
- 재귀 함수
- 함수가 자기 자신을 호출 하는 것
- 탈출조건을 반드시 포함해야함
- for, while로 구현할 수 없는 경우에만 부분적으로 사용하는것을 권장
- 중첩 함수
- 함수 내부에 정의 된 함수
- 중첩 함수를 포함하는 함수 → 외부 함수
- 콜백 함수
- 함수의 매개변수로 다른 함수를 전달할 때 전달되는 함수
- 콜백 함수를 전달받은 함수 → 고차 함수
- 콜백 함수는 고차 함수에 의해 호출 된다.
- 순수 함수와 비순수 함수
- 순수 함수 → 외부 상태에 의존하지도 않고, 변경하지도 않는 함수
- 오로지 매개 변수에만 의존하여 값을 생성하여 반환함
- 비순수 함수 → 외부 상태에 의존하거나, 외부 상태를 변경하는 함수
- 순수 함수 → 외부 상태에 의존하지도 않고, 변경하지도 않는 함수
'스터디 > 모던자바스크립트딥다이브' 카테고리의 다른 글
[모던자바스크립트 딥다이브] 14장 전역 변수의 문제점 (0) | 2023.08.13 |
---|---|
[모던자바스크립트 딥다이브] 13장 스코프 (0) | 2023.07.31 |
[모던자바스크립트 딥다이브] 11장 객체 리터럴 (0) | 2023.07.25 |
[모던자바스크립트 딥다이브] 10장 객체 리터럴 (0) | 2023.07.25 |
[모던자바스크립트 딥다이브] 09장 타입 변환과 단축 평가 (0) | 2023.07.25 |