본문 바로가기

Language/Java Script

자바스크립트 함수 객체

1. 자바스크립트에서는 함수도 객체다.

function add(x, y){
	return x + y;
}

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

console.log(add.result); // 출력값 : 5
console.log(add.status); // 출력값 : 'OK'

2. 함수는 값이다.

  - 리터럴에 의해 생성

  - 변수나 배열의 요소, 객체 프로퍼티 등에 할당 가능

  - 함수의 인자로 전달 가능

  - 함수의 리턴값으로 리턴 가능

  - 동적으로 프로퍼티를 생성 및 할당 가능

 

위의 기능이 모두 가능한 객체를 일급 객체(First Class Object)라고 부른다.

이러한 일급객체의 특징으로 함수형 프로그래밍이 가능하다.

 

3. 변수나 프로퍼티의 값으로 할당 가능하다.

//변수에 함수 할당
var foo = 100;
var bar = function(){return 100;}
console.log(bar()); // 출력값 : 100

//property에 함수 할당
var obj = {};
obj.baz = function(){return 200;}
console.log(obj.baz()); // 출력값 : 200

4. 함수 인자로 전달 가능하다.

//함수 표현식으로 foo()함수 생성
var foo = function(func){
	func(); // 인자로 받은 func 함수 호출
};

//foo() 함수 실행
foo(function(){
	console.log('Function can be used as a argument.');
});

// 출력 결과 : Function can be used as a argument.');

5. 리턴값으로 활용 가능하다.

var foo = function(){
	return function(){
    	console.log('this function is the return value.');
    };
};

var bar = foo();
bar();

//출력 결과 : this function is the return value.

6. 프로퍼티

  - length : 함수의 인자 수

  - prototype 프로퍼티

     · constructor 프로퍼티 하나만 있는 객체를 가리킨다.

     · 함수를 생성할 때 함수 자신과 연결된 프로토타입 객체를 동시에 생성하며,

       함수 객체와 프로토타입 객체는 서로를 참조한다.

 

7. 프로토 타입

  - [[Prototype]] == __proto__ : 모든 자바스크립트 객체가 가진 프로토타입

  - Function.prototype == 함수객체 : 모든 함수들의 부모 역할을 하는 프로토타입 객체이며

                                                부모는 Object.prototype 객체