JavaScript/함수

[함수의 특성] 함수의 객체적 특성

Eugenius 2021. 2. 3. 20:39

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

함수의 기본 기능인 코드 실행뿐만 아니라, 일반 객체처럼 프로퍼티들을 가질 수 있다. 

 

// add()함수를 생성할 때, 함수 코드는 함수 객체의 [[Code]] 내부 프로퍼티에 자동으로 저장된다. 
function add(x,y){
	return x+y;
 }
 
 
 // add() 함수 객체에 result, status 프로퍼티 추가 
 
 add.result = add(3,2);
 // 일반 객체처럼 result 프로퍼티를 동적으로 생성하고 함수 실행 결과를 저장했다. 
 add.status = 'OK';

 
 console.log(add.result); // 5
 console.log(add.status); // OK 
 
 
 

위처럼 자바스크립트의 함수는 코드를 수행하는 역할과 자신의 프로퍼티를 가질 수 있는 객체라고 볼 수 있다. 

 


2. 자바스크립트의 함수는 값으로 취급된다. 

자바스크립트의 함수는 일반 객체처럼 취급될 수 있기에 다음과 같은 동작이 가능하다. 

 

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

 

위와 같은 기능이 모두 가능한 객체를 일급 객체라고 부른다. 이는 곧 함수가 일반 객체처럼 값으로 취급된다는 것을 의미한다. 

함수를 변수나 객체, 배열 등에 값으로도 저장할 수 있으며, 다른 함수의 인자로 전달하거나 함수의 리턴값으로도 사용 가능하다는 것을 알 수 있다. 

 

 일급 객체란.
 컴퓨터 프로그래밍 언어 디자인에서, 일급 객체(영어: first-class object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다. 보통 함수에 매개변수로 넘기기, 수정하기, 변수에 대입하기와 같은 연산을 지원할 때 일급 객체라고 한다.

 

 

 

- 함수는 숫자나 문자열처럼 변수나 프로퍼티의 값으로 할당될 수 있다. 

// 변수에 함수 할당 
var foo = 100; 
var bar = function(){ return 100; };

console.log(bar()); // 출력값 100 



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

 

- 함수 인자로 전달 

함수는 다른 함수의 인자로도 전달이 가능하다. 

// 함수 표현식으로 foo() 함수 생성 
var foo = function(func){
	func();
 }; 
 
 // foo() 함수 실행 
 foo(function(){
 	console.log('Function can be used as the argument');
 });

foo()는 함수 표현식으로 생성한 함수로서, 인자로 받은 func 함수를 내부에서 함수 호출 연산자를 붙여 호출하는 기능을 한다. 

 

 

 

- 리턴값으로 활용 

함수는 다른 함수의 리턴값으로도 활용할 수 있다. 함수 자체가 값으로 취급되기 때문에 함수를 리턴값으로 활용이 가능하다. 

var foo = function(){

	return function(){
    	console.log('this function will be returned');
        };
 };
 
 var bar = foo();
 bar(); 

 

'JavaScript > 함수' 카테고리의 다른 글

함수 객체의 기본 프로퍼티  (0) 2021.02.08
자바스크립트의 함수의 생성  (0) 2021.02.02