NATIVE

settings_applicationsObject

NATIVE

Editing
  • account_tree
  • bug_report

ObjectFunction

함수(function)를 생성하거나 함수에 대한 API를 제공한다.

설명

Function 객체의 특성

ECMAScript의 모든 함수는 Function 객체를 상속받는다. 또한 Function 객체 자신은 Object 객체를 상속받는다. 그래서 함수가 객체라는 사실을 분명히 한다. 그것도 그냥 객체가 아닌 일급 객체(first class object)라는 것이다.

함수는 객체를 생성(new Function()과 다름)하는 역할을 하기도 한다. 이 말은 객체가 객체를 생성한다는 뜻과 같다. 생성된 객체는 Function 객체의 성격을 갖지 않고 완전한 객체가 된다.

function Demo(x) {
	this.x = x;
}

console.log(typeof Demo);
//->> "function"
console.log(typeof Demo.__proto__);
//->> "function"
console.log(typeof Demo.__proto__.__proto__);
//->> "object"
console.log(typeof new Demo(1));
//->> "object"
console.log(typeof new Demo(1).__proto__);
//--> "object"

상기 코드는 아래의 [예제]에서 확인이 가능하다.

완전한 객체

완전한 객체라는 표현은 다른 오해를 불러올 수도 있을 것 같다. 잘 알려져 있는 의미로 함수는 어떠한 기능이 작동하기 위해 분리된 공간으로 나누어 놓은 구현체를 말한다. 보통 여기에 해당하는 함수를 일반 함수(regular function)라 부를 수 있다. 반면 기본적으로는 일반 함수와 다르지 않지만 내부적으로 this 지시자를 가지고 [[Prototype]]으로 확장하기 위한 목적을 가진 함수도 있다. 이러한 함수는 new 연산자와 함께 호출해야 한다. 여기에 해당하는 함수를 생성자 함수(constructor)라고 부른다. 이렇게 자바스크립트는 크게 일반 함수와 생성자 함수로 구분할 수 있다. 일반 함수 또는 생성자 함수는 모두 Object 객체를 상속한 Function 객체를 상속받는다. 완전한 객체의 의미는 Object 객체만을 상속받은 객체이며 생성자 함수에 의해서 생성된 객체를 나타낸다.

 Function 객체에서 함수의 생성

함수는 일반적으로 리터럴(literal)로 작성한다. 리터럴로 구현된 함수도 Function 객체의 인스턴스이다. 실제로 테스트 코드를 아래의 [예제]에서 확인하기 바란다. 그리고 함수에 대한 기본적인 내용은 자바스크립 함수 문서를 참조하기 바란다. Object 객체를 상속한 Function 객체는 함수에 대한 API를 지원하지만 다른 객체와 마찬가지로 생성자를 가지고 있다. 즉 동적으로 함수를 생성할 수 있다는 뜻이다. 이 부분은 실제로 생성자 함수를 참조하기 바란다. 분명 필요한 기능이긴 하지만 리터럴로 생성한 함수와는 다음과 같은 중요한 차이가 있다.

  • 항상 전역 공간(global scope)에서 실행한다.
  • 클로저(closures)를 생성하지 않는다.
  • 오직 자신의 지역 변수와 전역 변수만 사용이 가능하다.

예제

(1) 생성자 함수와 생성자 함수로 생성된 객체 비교
(2) 인스턴스로 구현된 함수와 리터럴로 구현된 함수의 비교

하위 트리 탐색

  • Constructor

    Function 객체를 생성하는 방법을 나타낸다. Functoin() 생성자 함수를 사용하는 것과 리터럴(literal)로 생성하는 방법이 있다. 리터럴로 생성하는 경우에도 Function 객체를 상속받는다.

    • Function()

      사용자 함수를 생성하는 생성자 함수이다.

  • [[Prototype]]

    • Properties

      • arguments

        함수에 전달된 인수를 조회한다. 유사 배열로 참조되며 인덱스로 접근이 가능하다.

      • caller

        지정된 함수를 호출한 함수를 참조한다. strict 모드에서는 사용할 수 없다.

      • length

        함수에 사용 되고 있는 인수의 개수를 조회한다.

      • name

        함수 이름을 조회한다.

      • prototype

        생성자 함수(constructor function)에 의해 생성된 인스턴스(instance)에게 상속되어지는 생성자의 프로토타입을 나타낸다.

    • Methods

      • apply()

        지정된 this와 제공된 인수를 가진 배열 또는 유사 배열로 함수를 호출한다.

      • bind()

        원본 함수와 동일한 본문을 갖는 바인딩된 함수를 만든다. this 키워드가 있는 경우 실제로 자신을 참조할 수 있도록 활성화된다.

      • call()

        인수를 지정하여 함수를 호출한다.

      • toString()

        함수의 소스 코드를 반환한다.

버전 명세

ECMAScript 2024(15th Edition)
#sec-function-objects

지원 웹브라우저