11-2. Function 오브젝트 / 함수 생명 주기, 함수 분류, length 프로퍼티
함수 분류
function 분류
- 빌트인 Function 오브젝트
- function 오브젝트
function 오브젝트는 빌트인 Function 오브젝트로 만듭니다. - function 인스턴스(new 연산자 사용)
function 인스턴스는 new 연산자를 사용한 것을 뜻합니다.
앞절에서 다뤘던 new Function 은 문자열로 작성된 것을 함수 코드로 만들면서 Function 인스턴스를 만들었습니다.
근데 이 function 인스턴스는 function 오브젝트에 해당됩니다.
function 오브젝트와 function 인스턴스는 같은 것입니다.
function 인스턴스는 그냥 function 오브젝트를 new 연산자를 붙여 만든 것을 뜻합니다.
이에 대해선 뒤에서 다루겠습니다.
function 오브젝트 생성 방법
- function 키워드 사용
- function getBook(title) {return title};
JS 엔진이 function 키워드를 만나면
- 이름이 getBook인 function 오브젝트 생성
위에서 말한 function 오브젝트입니다.
물론 이것도 성격적으론 빌트인 Function 오브젝트를 통해 만드므로 인스턴스에 해당합니다.
하지만 new 연산자가 있으므로 강좌에선 function 오브젝트로 부르겠다는 것입니다.
- 이름이 getBook인 function 오브젝트 생성
함수 생명 주기
함수 호출
- getBook(“JS북”);
함수를 호출하면서 파라미터 값을 넘겨 줌
function getBook(title) { return title; } var result = getBook("JS북"); console.log(result); // JS북
함수 코드 실행
- JS 엔진 컨트롤이 함수의 처음으로 이동 (컨트롤 : 자바스크립트 스펙에 작성되어있는 용어입니다.)
- 파라미터 이름에 넘겨 받은 파라미터 값 매핑
- 함수 코드 실행
return 작성에 관계없이 반환 값을 갖고 함수를 호출한 곳으로 돌아감
return 문을 작성하지 않아도 undefined가 반환됩니다.
반환된 값을 가지고 자기가 호출된 곳으로 돌아갑니다.
그리고 그 값을 변수든 어디든 코드 내용대로 전달합니다.이러한 것을 함수 생명 주기라고 합니다. (function life cycle)
length 프로퍼티
함수의 파라미터 수가
생성되는 function 오브젝트에 설정됨
function add(one, two) { return one + two; } console.log(add.length); // 2
함수를 호출한 곳에서 보낸 파라미터 수가 아님
function add(one, two) { return one + two; } add(1, 2, 3, 4); console.log(add.length); // 2
- add(1,2,3,4)로 호출하면 one에 1이 설정되고 two에 2가 설정됩니다.
- add() 함수를 호출한 곳에서 보낸 값의 수가 아닙니다.
- length 값은 4가 아니라 2입니다.
함수에 설정된 파라미터 수와 호출할 때 넘겨주는 파라미터 수가 다르면 함수가 호출되지 않는 언어도 있습니다.
이 또한 그 나름의 장점이 있습니다.
하지만 자바스크립트는 호출하는 파라미터의 수와 호출받는 함수의 파라미터 수가 같지 않아도 됩니다.
또한 파라미터 값의 타입이 같지 않아도 됩니다.
일부 언어는 파라미터 앞에다가 타입을 작성합니다.
각 파라미터에 전달한 값의 타입과 호출되는 함수의 각 파라미터의 타입이 다르면 호출되지 않는 경우도 있습니다.
그것은 그 언어의 특징입니다.
여튼 자바스크립트는 각 파라미터의 타입을 체크 안하고 호출한다는 것입니다.
이런 매커니즘을 갖고 있습니다.
- JS 엔진이 자동으로 설정