하루에 한 문제

함수객체 본문

Dev/JavaScript

함수객체

dkwjdi 2021. 4. 7. 01:02

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

  • 즉 함수의 기본 기능인 코드 실행뿐 아니라, 함수 자체가 일반 객체처럼 프로퍼티들을 가질 수 있다.
//함수 선언 방식
function add(x, y){
    return x + y;
}

//add() 함수 객체에 result, status프로퍼티 추가
add.result = add(3, 2);
add.status = 'OK';

console.log(add.result);
console.log(add.status);
console.dir(add);

  • 위 예제는 함수선언문으로 함수를 생선한 후, 일반 객체처럼 프로퍼티를 추가하는게 가능하다는 것을 보여준다!
  • add()함수를 생성할 대 함수 코드는  함수 객체의[[Code]]내부 프로퍼티에 자동으로 저장된다.

add() 함수 객체의 최종 모습은 이렇게 된다.

함수가 함수본연의 기능인 코드를 포함하고 있는 [[Code]], 프로퍼티와 일반 객체처럼 result, status 프로퍼티를 가지는 것을 볼 수 있다.

 

 

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

앞의 예제 처럼 자바스크립트에서 함수는 객체다!

이는 함수도 일반 객체처럼 취급될 수 있다는 것이다!

때문에 자바스크립트 함수는 다음과 같은 동작이 가능하다!

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

 

위와 같은 특징때문에 자바스크립트에서는 함수를 일급 객체라고 부른다.

일급객체라는 말은 컴퓨터 프로그래밍 언어 분야에서 쓰이는 용어로, 위의 기능이 모두 가능한 객체를 칭한다.

 

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

함수는 숫자나 문자열처럼 변수나 프로퍼티 값으로 할당가능하다.

//변수에 함수 할당
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(); //인자로 받은 func실행!
}

foo(function () {
    console.log('foo');
});

 

리턴값으로 활용

//함수 표현식으로 foo()생성
var foo = function () {
    return function () {
        console.log('foo');
    };
};

var bar = foo();
bar();

  • foo()의 실행결과로 함수가 return 되고 이로 인해 bar()를 실행하는 것이 가능하다!

 

 

참고

book.naver.com/bookdb/book_detail.nhn?bid=7400243

'Dev > JavaScript' 카테고리의 다른 글

함수 호출과 this  (0) 2021.04.09
함수 객체의 기본 프로퍼티  (0) 2021.04.07
함수정의  (0) 2021.04.07
자바스크립트 데이터 타입  (0) 2021.04.06
익명함수 & 즉시 실행 함수 & 내부함수  (0) 2021.04.04
Comments