모던 자바스크립트 Deep Dive 정리
1. 일급 객체
1-1. 일급 객체의 조건 4가지
▶ 무명의 리터럴로 생성 가능
▶ 변수나 자료구조(객체, 배열 등)에 저장 가능
▶ 함수의 매개변수에 전달 가능
▶ 함수의 반환값으로 사용 가능
자바스크립트의 함수는 위의 조건을 모두 만족하므로 일급 객체이다
▶ 즉, 함수를 객체와 동일하게 사용할 수 있다
▷ 함수 객체는 일반 객체에는 없는 함수 고유의 프로퍼티를 소유한다
2. 함수 객체의 프로퍼티
2-1. arguments 프로퍼티
▶ 함수 호출시 전달된 인수들의 정보를 담고 있는 순회 가능한 유사배열 객체
★ 유사배열 : length 프로퍼티를 가진 객체로, for 문으로 순회 가능 (대표적으로 문자열)
▷ 배열 메서드를 사용할 수는 없다
▷ 함수 내부에서만 참조할 수 있고, 지역 변수처럼 사용됨
▷ 콘솔 예시
▶ 인수가 매개변수의 숫자보다 많거나 적어도 에러가 발생하지 않음
▷ 우선 모든 인수는 arguments 객체의 프로퍼티로 보관된다
arguments 객체를 활용해 인수 갯수를 확인하고 이에 따라 함수의 동작을 달리 정의할 수 있다
▶ ES6부터 arguments 객체와 비슷한 rest 파라미터가 도입됨
2-2. caller 프로퍼티
▶ 함수 객체의 caller 프로퍼티는 함수 자신을 호출한 함수를 가리킨다 (중첩 함수 형태로 사용)
▶ ECMAScript 사양에 포함되지 않은 비표준 프로퍼티
2-3. length 프로퍼티
▶ 함수를 정의할 때 선언한 매개변수의 갯수를 나타냄
▷ arguments 객체의 length 프로퍼티는 인수의 갯수를 나타내므로 엄연히 다름
2-4. name 프로퍼티
▶ 함수 이름을 나타냄
▷ ES5에서는 무기명 함수가 변수에 저장된 형태에서 빈 문자열을 리턴
▷ ES6에서는 그 변수 이름을 리턴
2-5. __proto__ 접근자 프로퍼티
▶ 모든 객체는 [[prototype]] 이라는 내부 슬롯을 가지며, __proto__ 접근자 프로퍼티를 통해
이에 접근할 수 있다
2-6. prototype 프로퍼티
▶ 생성자 함수로 호출할 수 있는 함수 객체, 즉 constructor만이 소유하는 프로퍼티
▷ prototype 프로퍼티는 생성자 함수가 생성할 인스턴스의 프로토타입 객체를 가리킨다