1. 함수 이란?
ㅇ [프로그래밍 일반]
- 함수란 일단 정의되면 여러번 호출되며 실행될 수 있는 프로그램 블록
ㅇ [자바스크립트 언어]
- 자바스크립트 함수는, 매우 다양한 기능, 독특한 특징들이 있음
- `C 언어의 함수`,`자바 언어의 메서드` 등과는 달리,
. 그 자신이 객체이며,
. 다른 객체를 생성할 수 도 있으며,
. `실행 execute 가능(호출 invoke 가능)`,`참조 reference 가능` 특징 둘다 갖는 특별한 객체임
2. 자바스크립트 함수의 특징 (통상의 프로그래밍 언어와의 차별점)
ㅇ 함수를 값 처럼 할당/대입할 수 있으며, 그 방법이 다양함
- `변수`에 함수를 할당할 수 있음
. 함수명과 변수명의 경계가 모호함 (명칭 만으로는 구분이 안됨)
- `객체의 프로퍼티`에 함수를 할당할 수 있음
- `배열 내 원소`에도 함수를 할당(정의,저장)할 수 있음
ㅇ 함수를 매개변수로 전달할 수도 있으며, 함수 그 자체를 반환할 수도 있음
- 즉, 함수를 다른 함수에 의해 인수로써 전달 또는 결과로써 반환할 수 있음
. 함수 그 자체가 인수나 리턴 값으로 사용할 수 있음
* 이를두고 1급 객체 (First Class Object) 또는 고차 함수(Higher-order Function) 라고도 함
. 따라서, 함수형 언어 처럼 함수형 프로그래밍이 가능함
ㅇ 함수 정의(생성) 방식이 다양함 ☞ 자바스크립트 함수 생성 방법 종류 참조
- `명시적 함수(함수 선언문)` 형식에 의한 방법 이외에도,
- `익명 함수` 형식
- `함수 리터럴` 형식
- `함수 객체 생성자` 형식 등
* 즉, 정적 및 동적으로 모두 생성 가능
ㅇ 자바스크립트 함수는 일종의 객체 임 ☞ Function 객체, 자바스크립트 객체 참조
- 그 안에 그만의 독특한 프로퍼티,메소드가 있게 됨
. 프로퍼티 : length (인수 갯수), name (함수 이름), arguments, caller, prototype
. 메소드 : apply(), bind(), call(), ☞ this 키워드 참조
constructor, toString() 등
- 또한, 상위 프로토타입 객체(Function.prototype)를 상속 받아서 사용 가능
. 例) `__proto__`라는 접근자 프로퍼티는, Object.prototype 객체의 프로퍼티를 상속 받음
- 또한, 통상의 객체 처럼, 함수 내에 프로퍼티도 추가 가능
. 즉, 함수 자체가 일반 객체 처럼 프로퍼티를 갖을 수 있음(추가할 수 있음)
ㅇ 객체 형태이긴 하나, 하나의 독립된 데이터타입으로 취급됨 ☞ 자바스크립트 타입 구분 참조
- String object,Number object,Date object 등 서로다른 객체 타입 처럼 독립적으로 취급됨
3. 자바스크립트 함수의 생성 방법 및 함수 형태의 종류
※ 함수 생성 방법의 종류 ☞ 자바스크립트 함수 생성 방법 종류 참조
- 명시적 함수, 익명 함수, 함수 리터럴 등
ㅇ 함수 형태의 종류
- 즉시실행함수, 화살표함수, 익명함수, 콜백함수, 중첩함수 등
4. 자바스크립트 함수에서의 인수(매개변수,파라미터)
※ ☞ 자바스크립트 함수 인수 참조
5. 자바스크립트 함수 호출 및 참조
ㅇ 함수 호출(invoke) : 함수명 뒤에 소괄호 ()를 쓰면 호출(실행)됨
- [참고] ☞ 즉시실행함수 참조
ㅇ 함수 참조(reference) : 함수명 뒤에 괄호()를 쓰지 않으면, 함수를 참조 만 함
- 이때에는, 변수,객체 프로퍼티,배열 원소 등에 할당시켜, 단순히 참조 만 가능
* 즉, 자바스크립트는, 함수를 값 처럼 할당,리턴이 가능하여, 프로그래밍에 유연성을 줌
6. 함수 메모이제이션 (Memoization)
ㅇ 함수를 호출했을 때, 그 인수와 반환값을 한 쌍으로 만들어 저장해 두는 기법