LHJ

I'm a FE developer.

11-2. Function 오브젝트 / 함수 생명 주기, 함수 분류, length 프로퍼티

30 Nov 2020 » js_beginner

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(“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
      
      1. add(1,2,3,4)로 호출하면 one에 1이 설정되고 two에 2가 설정됩니다.
      2. add() 함수를 호출한 곳에서 보낸 값의 수가 아닙니다.
      3. length 값은 4가 아니라 2입니다.

함수에 설정된 파라미터 수와 호출할 때 넘겨주는 파라미터 수가 다르면 함수가 호출되지 않는 언어도 있습니다.

이 또한 그 나름의 장점이 있습니다.
하지만 자바스크립트는 호출하는 파라미터의 수와 호출받는 함수의 파라미터 수가 같지 않아도 됩니다.

또한 파라미터 값의 타입이 같지 않아도 됩니다.
일부 언어는 파라미터 앞에다가 타입을 작성합니다.
각 파라미터에 전달한 값의 타입과 호출되는 함수의 각 파라미터의 타입이 다르면 호출되지 않는 경우도 있습니다.

그것은 그 언어의 특징입니다.
여튼 자바스크립트는 각 파라미터의 타입을 체크 안하고 호출한다는 것입니다.
이런 매커니즘을 갖고 있습니다.


  • JS 엔진이 자동으로 설정