Chapter 18 함수와 일급 객체
in Frontend / Js / Javascript
function and first-class object
18.1 일급 객체
아래 4개 조건 만족 시 일급객체
1. 무명의 리터럴로 생성 가능 (런타임에 생성 가능하다는 뜻)
2. 변수나 자료구조 (ex: 객체) 에 저장 가능
3. 함수의 매개변수로 사용 가능
4. 함수 return으로 사용 가능
- 함수를 객체랑 동일하게 사용할 수 있다는 것 (runtime에 함수 객체로 평가됨)
- 함수 vs 일반객체:
- 함수는 호출가능하며
- 함수객체는 고유 property 를 보유함
18.2 함수 객체의 프로퍼티
arguments
(인수) 프로퍼티 : 순회가능한 객체.{0: 'a', 1: 'b', ...}
형태로 저장- 매개변수 <-> 인수 개수 확인 X. 에러발생X.
- 매개변수는 undefined 로 초기화 시킨 다음에 인수 전달되면 재할당함
- 초과 인수 전달돼도 일단 가지고 있음!
- 유사배열객체이자 이터러블 하기 때문에
- 매개변수 개수를 확정할 수 없는 가변인자 함수 구현할때 유용함 (
arguments.length
로 순회 가능하니..) - 유사배열객체는 iterable 하지만 배열 method들은 사용 불가 (throw error)해서 간접적으로 사용해야 한다는 불편함이 있음
- 매개변수 개수를 확정할 수 없는 가변인자 함수 구현할때 유용함 (
caller
프로퍼티 : 비표준임. 본인 호출하는 함수 기억length
프로퍼티 : 매개변수 개수name
프로퍼티 :a.name
값:- 기명함수:
const a = function b(){};
일 경우 =>a.name
=>b
- 익명함수(ES6):
const a = function(){};
일 경우 =>a.name
=>a
- 기명함수:
prototype
프로퍼티 : constructor 함수에만 존재__proto__
: [[Prototype]] slot 접근하기 위한 접근자 프로퍼티- 함수 고유 프로퍼티 아님!!!
object.hasOwnProperty('__proto__')
->false
나옴
Q. 가변인자 함수 in typescript?
arguments 객체활용한 가변인자 함수: (권장X)
function oldStyleSum(): number { let sum = 0; for (let i = 0; i < arguments.length; i++) { sum += arguments[i] as number; } return sum; }
우리가 흔히 보던 거:
function sum(...numbers: number[]): number { return numbers.reduce((acc, curr) => acc + curr, 0); } // 사용 예시 console.log(sum(1, 2, 3)); // 6 console.log(sum(1, 2, 3, 4, 5)); // 15