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 |