[모던 자바스크립트 딥다이브] 18장 함수와 일급 객체

Soyeon·2025년 3월 20일
1

일급 객체

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

자바스크립트의 함수는 위의 조건을 모두 만족하므로 일급 객체다.

즉, 함수를 객체와 동일하게 사용할 수 있다.

  • 함수의 매개변수로에 전달 가능, 반환값으로 사용 가능
    -> 이 특징은 자바스크립트의 함수형 프로그래밍을 가능케한다.

함수 객체의 프로퍼티

함수도 객체다. 따라서 함수도 프로퍼티를 가질 수 있다.

arguments 프로퍼티

  • arguments 객체는 함수 호출 시, 전달된 인수들의 정보를 담고 있는 순회 가능한 유사 배열 객체
  • 함수 내부에서 지역 변수처럼 사용된다 -> 함수 외부에선 참조 불가능
  • 자바스크립트에서 함수의 매개변수와 인수의 개수가 일치하는지 확인하지 않는다.
    • 함수 정의할 때 선언한 매개변수는 함수 내부에서 변수와 동일하게 취급되어 암묵적으로 선언되고, undefined로 초기화된 이후 인수가 할당된다.

length 프로퍼티

  • 함수를 정의할 때 선언한 매개변수의 개수
  • arguments 객체의 length 프로퍼티 !== 함수 객체의 length 프로퍼티
    • arguments 객체의 length 프로퍼티 = 인수의 개수
    • 함수 객체의 length 프로퍼티 = 매개변수의 개수

name 프로퍼티

  • 함수 이름
  • 익명 함수일 때,
    • ES5: 빈 문자열
    • ES6: 함수 객체를 가리키는 식별자
// 기명 함수 표현식
const namedFunc = function foo() {};
console.log(namedFunc.name); // foo

// 익명 함수 표현식 
// - ES5 에서는 빈 문자열('')
// - ES6 에서는 함수 객체를 가리키는 식별자
const anonymousFunc = function () {};
console.log(anonymousFunc.name); // anonymousFunc

function bar() {}
console.log(bar.name); // bar

proto 접근자 프로퍼티

  • 모든 객체는 [[Prototype]] 이라는 내부 슬롯을 가진다.
  • [[Prototype]] 내부 슬롯이 가리키는 프로토타입 객체에 접근하기 위해 사용

prototype 접근자 프로퍼티

  • 생성자 함수로 호출할 수 있는 함수 객체다.
  • constructor에만 존재
profile
탄탄한 개발자로 살아남기🗿

0개의 댓글