모던 자바스크립트 Deep Dive 18장-함수와 일급 객체

HustleKang·2022년 4월 5일

일급 객체

4가지 만족 시 일급 객체

  • 무명의 리터럴로 생성 가능
  • 변수나 자료구조에 저장 가능
  • 함수의 매개변수로 전달 가능
  • 함수의 반환값으로 사용 가능

함수 객체의 프로퍼티

일반 객체에는 없는 함수 객체 고유의 프로퍼티 : arguments,caller,length,name,prototype

arguments 프로퍼티

arguments 프로퍼티의 값은 arguments객체
arguments객체는 함수에 전달된 인수를 갖고있는 유사 배열 객체(키:인덱스,값:인수)
유사 배열 객체 : length프로퍼티가 있어서 for문으로 순회가 가능한 객체
함수 내부에서만 참조가능

함수를 정의할 때 선언한 매개변수는 함수 내부에서 변수처럼 동작
함수가 호출되면 암묵적으로 매개변수가 선언,undefined로 초기화 그 이후 인수 할당

가변 인자 함수에서 유용하지만 ES6 Rest파라미터로 대체 가능

function total(){
    let sum=0;
    for(let i=0;i<arguments.length;i++){
        sum+=arguments[i];
    }
    return sum;
}

function total2(...res){
    let sum=0;
    res.forEach((x)=>sum+=x);
    return sum;
}

caller 프로퍼티

함수 자신을 호출한 함수를 가르킴
호출한 함수가 없다면 null

length 프로퍼티

함수를 정의할 때 선언한 매개변수의 개수

name 프로퍼티

함수의 이름을 나타냄
익명 함수이면 ES5에서는 '',ES6에서는 그 함수 객체를 가르키는 식별자

함수를 호출할 때는 함수의 이름이 아닌 함수 객체를 가르키는 식별자로 호출

proto 접근자 프로퍼티

모든 객체는 [[Prototype]] 내부 슬롯을 갖음
[[Prototype]]은 상속을 구현하는 프로토타입 객체를 가르킴
이 내부슬롯에 간접적으로 접근하기 위한 접근자 프로퍼티임

prototype 프로퍼티

constructor만 소유하는 프로퍼티
일반 객체와 생성자 함수로 호출할 수 없는 객체는 없음
생성자 함수로써 호출되면 앞으로 생성할 인스턴스의 프로토타입 객체를 가르킴

이웅모, 『모던 자바스크립트 Deep Dive』, 위키북스(2021)

profile
grindin'

0개의 댓글