본문 바로가기
카테고리 없음

CH_18. 함수와 일급 객체

by 코딩기 2023. 11. 18.
728x90

일급 객체

  • 일급 객체의 조건
  1. 무명의 리터럴로 생성 가능(런타임에 생성 가능)
  2. 변수나 자료구조 등에 저장 가능
  3. 함수의 매개변수에 전달 가능
  4. 함수의 반환값으로 사용 가능

==-> JS의 함수는 위 조건을 모두 만족하므로 일급 객체==

따라서, 함수를 객체와 동일하게 사용가능하며 값을 사용하는 곳이면 어디든 리터럴로 정의가능, 함수형 프로그래밍을 가능케 함


함수 객체의 프로퍼티

  • 함수 객체 고유 프로퍼티
    arguments, caller, length, name, prototype (데이터 프로퍼티)
    __proto__ (접근자 프로퍼티)
  • arguments 프로퍼티(유사 배열 객체)
    함수 내부에서 지역 변수와 같이 사용(함수 외부에서 참조X)
    모든 인수는 암묵적으로 arguments 객체의 프로퍼티로 보관ㅂ
    인수를 프로퍼티 값으로, 키는 인수의 순서를 나타냄
    ==-> 함수 호출 시 인수 개수를 확인할 때 유용하게 사용==
  • function sum() { let res = 0; for(let i = 0; i < arguments.length; i++){ res += arguments[i]; } } console.log(sum()); // 0 console.log(sum(1,2,3)) // 6
  • length 프로퍼티
    함수를 정의할 때 선언한 매개변수의 개수
    ==->arguments 객체의 length와 함수 객체의 length는 서로 다를 수 있음!==
  • function foo() { console.log(foo.length) // 0 } function foo(1, 2) { console.log(foo.length) // 2 } function foo(1, 2, 3, 4, 5) { console.log(foo.length) // 5 }
  • name 프로퍼티
    함수의 이름을 나타냄
  • var namedFunc = function foo() {}; console.log(namedFunc.name); // foo
  • __proto__ 프로퍼티
    모든 객체는 [[prototype]] 이라는 내부 슬롯을 가짐
    -> 상속을 구현하는 프로토타입 객체를 가리킴
    프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티
  • const obj = { a : 1}; console.log(obg.__proto__ === object.prototype); // true
  • prototype 프로퍼티
    생성자 함수로 호출할 수 있는 함수 객체 즉, Constructor만 소유-> 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킴
  • (function () {}).hasOwnProperty('prototype'); // true