함수와 일급 객체

솜사탕·2023년 5월 13일
0

JavaScript

목록 보기
14/23

일급 객체

  • 무명의 리터럴로 생성할 수 있다.
  • 변수나 자료구조(객체, 배열)등에 저장할 수 있다.
  • 함수의 매개변수에 전달할 수 있다.
  • 함수의 반환값으로 사용할 수 있다.

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

// 무명의 리터럴로 생성
// 함수는 변수에 저장
const test1 = function (num) {
  return ++num;
}

const test2 = function (num) {
  return --num;
}

// 함수를 객체에 저장
const auxs = { test1, test2 };

// 함수의 매개변수에 전달
// 함수의 반환값으로 사용

function make(aux) {
  let num = 0;
  
  return function() {
    num = aux(num);
    return num;
  };
}

// 함수는 매개변수에게 함수를 전달
const increaser = make(auxs.test1);
console.log(increaser()); // 1
console.log(increaser()); // 2


const decreaser = make(auxs = auxs.test2);
console.log(decreaser()); // -1
console.log(decreaser()); // -2

이해가 안되는 분이 있을수 있기에 make 함수 설명 입니다.

make 함수는 aux라는 함수를 인수로 받고 aux 함수를 호출하여 숫자를 반환하는 함수를 반환합니다.
aux 함수는 숫자 하나를 인수로 받고 다른 숫자를 반환합니다. make 함수는 aux 함수를 호출하여 숫자를 반환하는 함수를 반환합니다.

arguments 프로퍼티

  • arguments 프로퍼티 값은 arguments 객체로, 함수 호출 시 전달된 인수들의 정보를 담고 있는 순회 가능한 유사 배열 객체다.

  • 함수 내부에서 지역 변수처럼 사용되어 외부에서 접근이 불가능하다.

  • 함수 객체 arguments 프로퍼티는 ES3 부터 표준에서 폐지되어 Function.arguments의 사용법은 권장되지 않는다.

  • arguments 객체는 인수를 프로퍼티 값으로 소유하며 프로퍼티 키는 인수의 순서를 나타낸다.

!주의점
자바스크립트는 함수의 매개변수와 인수의 개수가 일치하는지 확인하지 않으며
매개변수 개수만큼 인수를 전달하지 않아도 에러가 발생하지 않는다.

length 프로퍼티

함수 객체의 length 프로퍼티는 함수를 정의할 때 선언한 매개변수의 개수를 가리킨다.


function foo() {
  console.log(foo.length); // 0
}
  
function bar(x) {
  return x;
}

console.log(bar.length); // 1

arguments 객체의 length 프로퍼티와 함수 객체의 length 프로퍼티 값은 다를 수 있으므로 주의해야 한다.
arguments 객체의 length 프로퍼티는 인자의 개수를 가리키고,
함수 객체의 length 프로퍼티는 매개변수의 개수를 가리킨다.

name 프로퍼티

함수 객체의 name 프로퍼티는 함수 이름을 나타낸다. (ES6 이후 표준)
name 프로퍼티는 ES5와 ES6에서 동작을 달리한다.
ES5에서 익명 함수 표현식의 경우 name 프로퍼티는 빈 문자열을 값으로 갖는다.
ES6에서는 함수 객체를 가리키는 식별자를 값으로 갖는다.

proto 접근자 프로퍼티

proto 프로퍼티는 내부슬롯(Prototype)이 가리키는 프로토타입 객체에 접근하기 위해 사용하는 접근자 프로퍼티다.

prototype 프로퍼티

constructor 만이 소유하는 프로퍼티다.
함수가 객체를 생성하는 생성자 함수로 호출될 때 생성자 함수가 생성할 인스턴스 프로토타입 객체를 가리킨다.

profile
공부공부공부공부공부공부

0개의 댓글