Function 객체
Function 객체
Function 객체는 함수를 위한 메서드를 제공합니다. JavaScript에서 모든 함수는 실제로 Function 객체입니다.
출처: Function
본문
Function 객체는 함수를 위한 메서드들을 제공합니다. JavaScript에서 모든 함수는 사실상 하나의 Function 객체입니다. 이 기능은 널리 확립되어 있으며 여러 브라우저와 기기에서 동작합니다.
생성자 (Constructor)
new Function() 생성자는 새로운 Function 객체를 만듭니다. 생성자를 직접 호출하면 함수를 동적으로 만들 수 있지만, eval()과 유사한 보안 문제와 (덜 심각하지만) 성능 문제가 있습니다. 그러나 eval()과는 달리, Function 생성자는 오직 전역 스코프(global scope)에서만 실행되는 함수를 만듭니다.
인스턴스 속성 (Instance properties)
Function.prototype에 정의되어 모든 Function 인스턴스가 공유하는 속성들입니다.
arguments: 이 함수에 전달된 인자를 나타냅니다. strict 모드, 화살표 함수, async 함수, generator 함수에서는arguments속성에 접근하면TypeError가 발생합니다. 대신 함수 클로저 내부에서arguments객체를 사용하세요.caller: 이 함수를 호출한 함수를 나타냅니다. strict 모드, 화살표 함수, async 함수, generator 함수에서는caller속성에 접근하면TypeError가 발생합니다.constructor: 인스턴스 객체를 만든 생성자 함수입니다.Function인스턴스의 초기값은Function생성자입니다.
각 Function 인스턴스가 직접 소유하는 속성(own property)들입니다.
name: 함수의 표시 이름입니다.length: 함수에 기대되는 인자의 수를 지정합니다.name: 함수의 이름입니다.prototype: 함수가new연산자와 함께 생성자로 사용될 때 사용되며, 새 객체의 프로토타입이 됩니다.
인스턴스 메서드 (Instance methods)
apply(): 주어진this값과 배열(또는 배열형 객체)로 제공된 선택적 인자로 함수를 호출합니다.bind(): 호출 시this키워드가 제공된 값으로 설정된 새 함수를 만들며, 선택적으로 주어진 인자들이 뒤따릅니다.call(): 주어진this값과 선택적 인자로 함수를 호출합니다.toString(): 함수의 소스 코드를 나타내는 문자열을 반환합니다.Object.prototype.toString메서드를 재정의합니다.Symbol.hasInstance: 생성자 함수가 객체를 자신의 인스턴스로 인식할지 결정하는 기본 절차를 지정하며,instanceof연산자에 의해 호출됩니다.
예제: Function 생성자와 함수 선언의 차이
Function 생성자로 만들어진 함수는 자신이 만들어진 컨텍스트에 대한 클로저를 생성하지 않으며, 항상 전역 스코프에서 생성됩니다. 실행할 때 오직 자신의 지역 변수와 전역 변수에만 접근할 수 있고, Function 생성자가 만들어진 스코프의 변수에는 접근할 수 없습니다. 이는 함수 표현식에 대한 코드를 사용한 eval()과는 다릅니다.
// Create a global property with `var`
var x = 10;
function createFunction1() {
const x = 20;
return new Function("return x;"); // this `x` refers to global `x`
}
function createFunction2() {
const x = 20;
function f() {
return x; // this `x` refers to the local `x` above
}
return f;
}
const f1 = createFunction1();
console.log(f1()); // 10
const f2 = createFunction2();
console.log(f2()); // 20
이 코드는 웹 브라우저에서 동작하지만, Node.js에서는 f1()이 ReferenceError를 발생시키는데, 이는 x를 찾을 수 없기 때문입니다. Node의 최상위 스코프는 전역 스코프가 아니며 x는 모듈에 국한되기 때문입니다.
더 알아보기
- function 선언
- function 표현식
- AsyncFunction
- GeneratorFunction
- 함수 가이드