개발/JavaScript

JavaScript] 자바스크립트 뿌시기 (함수도 객체다)

펭귀니 :) 2021. 1. 17. 20:20

🎉 함수도 객체다


자바스크립트에서는 함수도 객체다.
객체는? 프로퍼티들을 가질 수 있다.

function multi(x, y){
  return x * y;
}

multi.result = multi(2, 1);
multi.status = true;

함수를 생성할 때 함수 코드는 [[Code]] 라는 내부 프로퍼티에 자동으로 저장된다.

🎉 함수는 값이다


자바스크립트에서 함수는 일급 객체이다.
아래의 특징이 있으면 일급 객체이다.

  • 리터럴에 의해서 생성
  • 변수나 배열의 요소, 객체의 프로퍼티 등에 할당 가능
  • 함수의 인자로 전달 가능
  • 함수의 리턴값으로 리턴 가능
  • 동적으로 프로퍼티를 생성 및 할당 가능

변수나 프로퍼티의 값으로 할당

var ten = function () { return 10; };
console.log(ten()); // print >> 10

var object = {};
object.first = function () { return 200; };
console.log(object.first()); // print >> 200

함수 인자로 전달

var first = function(func) {
  func(); // 인자로 받은 func 함수 호출
};

first(function() {
  console.log("method argument Function");
});

// print >> method argument Function

익명 함수를 func 인자로 넘겼다.

리턴 값으로 활용

var first = function() {
  return function () {
    console.log("Function can be used return value");
  };
};

var callFunction = first();
callFunction(); // print >> Function can be used return value

🎉 함수 객체의 기본 프로퍼티


자바스크립트에서 함수는 객체다.
일반 객체와는 다르게 추가로 함수 객체만의 표준 프로퍼티가 정의되어 있다.

_proto_ 프로퍼티

  • 함수 객체의 프로토타입 객체는 Function.prototype 객체이다.
  • Function.prototype 역시 함수 객체다.
    • Function.prototype 객체의 부모는 모든 객체의 조상격인 Object.prototype 객체이다.

length 프로퍼티

  • 함수가 정상적으로 실행될 때, 정의된 인자의 수를 나타낸다. ex) function A(x, y)일 경우 A.length는 2이다.
  • length는 ECMAScript에서 정한 모든 함수가 가져야하는 표준 프로퍼티이다.

prototype 프로퍼티

  • 모든 객체의 부모를 나타내는 내부 프로퍼티인 [[Prototype]] 과는 다르다.
  • 함수 자신과 연결된 constructor 프로퍼티 하나만 있는 프로토타입 객체를 생성하고, prototype과 constructor 프로퍼티는 서로를 참조한다.

📖 출처


송형주, 고현준 지음, 『인사이드 자바스크립트』, 한빛미디어(2014)