유블로그

자바스크립트 함수 객체 본문

JavaScript & jQuery

자바스크립트 함수 객체

yujeong kang 2021. 6. 18. 15:19
var add = function (x, y) {
	return x + y;
};

add.result = add(3,2);
add.status = 'OK';

console.log(add(4,3));	// 7
console.log(add.result);	// 5
console.log(add.status);	// OK

함수도 객체처럼 프로퍼티를 가질 수 있다.

 

자바스크립트에서 함수도 객체로 값으로 취급된다 !

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

위와 같은 특징으로 함수는 일급 객체라고 부른다.

위키백과의 일급 객체 정의이다. 저 조건이 만족하면 일급 객체라고 한다.

 

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

var obj = {};
obj.func = function () { return 100; };
console.log(obj.func());	// 100

 

(2) 함수 인자로 전달

var f = function (func) { 
	func(); 
};

f(function() {
	console.log('hi');
});

// 출력 : hi

익명함수를 func 인자로 넘기면서 func를 실행할 수 있다.

 

(3) 리턴값으로 리턴

var f = function () { 
	return function() {
    	console.log('hi');
    }; 
};

var bar = f();
bar();

// 출력 : hi

 

(4) 함수 객체의 기본 프로퍼티

함수를 console.dir() 로 출력해보면

arguments, caller, length, name, prototype, __proto__ 등이 나온다.

함수가 기본적으로 가지고 있는 프로퍼티가 있다는 얘기다.

 

  • arguments 는 함수 호출 시 전달된 인자값
  • caller 는 자신을 호출한 함수
  • name 은 함수의 이름으로 익명함수의 경우 빈 문자열
  • __proto__ 는 객체의 부모객체로 함수의 경우 (함수 부모객체) Function.prototype 객체다.
    모든 함수의 부모 객체인 Function.prototype은
    • constructor
    • toString()
    • apply()
    • call()
    • bind()

      를 가지고 있다.
  • length 는 정상적으로 실행될 때 기대되는 인자의 개수 ( 즉, 함수에서 정의한 인자 수 )
  • prototype 은 객체로서 constuctor 프로퍼티를 가진 객체를 가리킨다.  그 constuctor 프로퍼티는 자신과 연결된 함수를 가리킨다.

함수의 prototype은 함수 객체를 가리키는 constructor를 포함한 prototype 객체를 가리킨다.