Function

Function 객체는 함수의 메서드를 제공합니다. JavaScript에서는 모든 함수는 사실 Function 객체입니다.

생성자

Function() (en-US)

새로운 Function 객체를 생성합니다. 생성자를 직접 호출하면 함수를 동적으로 생성할 수 있지만 보안 및 eval()와 유사한(그러나 훨씬 덜 중요한) 성능 때문에 고통받을 수 있습니다. 그러나 eval()과 달리 Function 생성자는 전역 범위에서만 실행되는 함수를 생성합니다.

인스턴스 속성

아래 속성은 Function.prototype에 정의되어 있고 모든 Function 인스턴스에서 공유됩니다.

Function.prototype.arguments 지원이 중단되었습니다 비표준

이 함수에 전달된 인수를 나타냅니다. 엄격 모드에서는, 화살표, 비동기 및 제너레이터 함수의 경우 arguments 속성에 액세스하면 TypeError가 발생합니다. 대신 함수 클로저 안에 arguments 객체를 사용하시기 바랍니다.

Function.prototype.caller (en-US) 지원이 중단되었습니다 비표준

이 함수를 호출한 함수를 나타냅니다. 엄격 모드에서는 화살표, 비동기 및 제너레이터 함수의 경우 caller 속성에 액세스하면 TypeError가 발생합니다.

Function.prototype.constructor

인스턴스 객체를 생성한 생성자 함수입니다. Function 인스턴스의 경우 초기 값은 Function (en-US) 생성자입니다.

아래 속성은 각 Function 인스턴스의 고유 속성입니다.

displayName (en-US) 비표준 Optional

함수의 표시 이름입니다.

length

함수가 요구하는 인수의 숫자가 명시되어 있습니다.

name

함수의 이름입니다.

prototype

함수가 new 연산자와 함께 생성자로 사용될 때 사용됩니다. 새 객체의 프로토타입이 됩니다.

인스턴스 메서드

Function.prototype.apply()

주어진 this 값과 배열 (혹은 유사 배열 객체)로 제공되는 선택적 인수를 가진 함수를 호출합니다.

Function.prototype.bind()

호출될 때 this 키워드가 제공된 값으로 설정된 새 함수를 생성하며, 선택적으로 새 함수가 호출될 때 제공된 인수 앞에 주어진 일련의 인수를 사용합니다.

Function.prototype.call()

주어진 this 값과 선택적 인수를 사용하여 함수를 호출합니다.

Function.prototype.toString()

함수의 소스 코드를 나타내는 문자열을 반환합니다. Object.prototype.toString 메서드를 재정의합니다.

Function.prototype[@@hasInstance]() (en-US)

생성자 함수가 객체를 생성자의 인스턴스 중 하나로 인식할지 여부를 결정하는 기본 절차를 지정합니다. instanceof 연산자에 의해 호출됩니다.

예제

함수 생성자와 함수 선언의 차이점

Function 생성자를 사용하여 생성된 함수는 생성 컨텍스트에 대한 클로저를 생성하지 않으며, 항상 전역 범위에서 생성됩니다. 함수를 실행할 때 Function 생성자가 생성된 범위의 변수가 아닌 자체 로컬 변수와 전역 변수에만 액세스할 수 있습니다. 이는 함수 표현식에 대한 코드에 eval()를 사용하는 것과는 다릅니다.

js
// `var`로 전역 속성을 생성합니다
var x = 10;

function createFunction1() {
  const x = 20;
  return new Function("return x;"); // 여기 `x`는 전역 `x`를 참조합니다
}

function createFunction2() {
  const x = 20;
  function f() {
    return x; // 여기 `x`는 위에 있는 로컬의 `x`를 참조합니다
  }
  return f;
}

const f1 = createFunction1();
console.log(f1()); // 10
const f2 = createFunction2();
console.log(f2()); // 20

이 코드는 웹 브라우저에서 작동하지만 f1()x를 찾을 수 없기 때문에 Node.js에서 ReferenceError가 발생합니다. 이는 Node의 최상위 범위가 전역 범위가 아니며 x가 모듈에 로컬이기 때문입니다.

명세서

Specification
ECMAScript Language Specification
# sec-function-objects

브라우저 호환성

BCD tables only load in the browser

같이 보기