728x90
- 일련의 과정을 문으로 구현하고 코드블록으로 감싸서 하나의 실행단위로 정의한 것
- 자바스크립트에서 함수는 값
- 함수이름, 매개변수, 인수, 반환값, 함수 몸체
- 함수를 정의해서 생성하고 호출을 통해 사용함
함수 사용 이유
- 코드의 재사용, 유지보수의 편리성, 코드의 신뢰성, 코드의 가독성
함수 리터럴
- 리터럴은 값을 생성
- 자바스크립트에서 함수는 객체 타입의 값
- 함수이름 생략 가능
- 함수 리터럴은
function
,함수이름
,매개변수
,몸체
로 구성됨함수이름
: 함수 몸체 내부에서만 참조할 수 있는 식별자
- 일반 객체는 호출 불가능, 함수는 호출 가능
함수 생성 방식
함수 선언문
- 함수이름을 생략할 수 없음
- 표현식이 아닌 문 --> 변수에 할당 불가능
- 함수 이름은 함수 몸체에서만 참조하기에 함수 이름으로 외부에서 호출하는 것은 불가능
- 자바스크립트 엔진은 함수 선언문을 변수에 할당하면 리터럴로 해석 --> 그래서 표현식이 아닌 문이지만 변수에 할당되는 것처럼 보임
- 자바스크립트 엔진은 함수를 호출하기 위해 함수 이름과 동일한 식별자를 생성하고 함수를 할당함
- 함수는 함수 이름으로 호출되는 것이 아닌, 함수 객체를 가리키는 식별자로 호출되는 것임
함수 표현식
- 일급 객체는 값의 성질을 갖는 객체 --> 함수는 일급 객체
- 함수 이름 생략 가능
- 함수를 가리키는 식별자로 호출
함수 생성 시점
- 함수 선언문
- 런타임 이전 자바스크립트 엔진에 의해 생성 --> 런타임 이전에 함수 객체가 생성되고 변수가 초기화됨
- 함수 선언문 이전에 함수 참조, 호출 가능 -->
함수 호이스팅
- 함수 표현식
- 변수 할당문의 값은 런타임에 평가
- 함수 표현식의 함수 리터럴도 할당문이 실행되는 시점에 평가되어 함수 객체가 생성
변수 호이스팅
발생
Function 생성자 함수
- 일반적이지 않음 --> 지양
화살표 함수
- 항상 익명함수로 정의
함수 호출
- 인수 : 값으로 평가될 수 있는 표현식, 개수와 타입에 제한 X
- 함수는 매개변수 개수와 인수 개수가 일치하는지 확인 안함, 에러도 발생 안함
- 인수가 할당 X 매개변수는
undefined
가 할당됨 - 매개변수 개수 < 인수 개수 : 초과된 인수는 무시 --> 완전히 무시하는 건 아님
- 모든 인수는
arguments
객체의 프로퍼티로 보관, 가변 인자 함수 구현에 사용 - 매개변수의 최대 개수에는 제한이 없음
- 이상적인 매개변수 == 0
- 3개 이상의 매개변수가 사용되면 객체로 묶어서 매개변수로 사용
- 객체를 인수로 사용하면 프로퍼티 키만 주의하면 됨, 프로퍼티의 순서는 무관
return
뒤에 반환값을 명시하지 않으면undefined
가 반환됨return
뒤에 줄바꿈이 있으면, 아래줄은 실행이 안됨
참조에 의한 전달, 외부 상태 변경
- 원시 값은 변경 불가능한 값이기에 매개변수가 원시값이면 원시 값이 매개변수에 복사되어 사용되기 때문에 부작용이 없음
- 객체 타입 값이 매개변수에 할당되면 매개변수에는 객체를 참조하는 값이 할당되기 때문에 매개변수의 객체가 변경되면 원본 객체도 변경됨 --> 부작용
함수 형태
즉시 실행 함수
- 정의와 동시에 즉시 호출되는 함수
- 주로 익명 함수
- 즉시 실행 함수는 그룹 연산자(
()
)로 감싸야 함
재귀 함수
- 자기 자신을 호출하는 함수
- 함수 내부에서 자기 자신을 호출할 때에는 함수 이름이나 식별자로 호출
- 탈출 조건 반드시 구현
중첩 함수
- 함수 내부에 정의한 함수, 내부 함수
- 외부 함수를 돕는 Helper
- ES6부터 함수는 문이 위치할 수 있는 곳이라면 어디든 정의 가능
- 호이스팅을 고려한다면 제어문 내에서 함수를 정의하는 것은 바람직하지 않음
콜백 함수
- 매개변수를 통해서 고차 함수의 내부로 전달되는 함수
- 변경되는 로직이 함수 외부에서 함수 내부로 전달되는 것임
- 콜백 함수는 고차 함수에 의해 호출
- 고차 함수는 콜백 함수에 인수를 전달할 수 있음
- 콜백 함수는 재사용할 일이 없다면, 고차 함수의 매개변수에 익명 함수로 구현
순수 함수, 비순수 함수
- 순수 함수는 외부 상태에 의존하지 않고, 외부 상태를 변경하지 않음 --> 부작용 X
- 비순수 함수는 외부 상태에 의존하고, 외부 상태를 변경함 --> 부작용 O
- 함수형 프로그래밍은 순수 함수와 보조 함수를 활용해 외부 상태 변화 부작용을 최소화 --> 불변성을 추구하는 프로그래밍
학습 도서
- '모던 자바스크립트 Deep Dive', 이웅모 저, 위키북스
'Language | Basic > JavaScript' 카테고리의 다른 글
[JavaScript 스터디] 전역 변수 (0) | 2021.01.24 |
---|---|
[JavaScript 스터디] 스코프 (0) | 2021.01.24 |
[JavaScript 스터디] 원시 값, 객체 비교 (0) | 2021.01.22 |
[JavaScript 스터디] 객체 리터럴 (0) | 2021.01.22 |
[JavaScript 스터디] 데이터의 타입 변환, 단축 평가 (0) | 2021.01.22 |