Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015년 7월.
Function() 생성자는 Function 객체를 생성합니다. 이 생성자를 직접 호출하면 동적으로 함수를 만들 수 있지만, eval() 함수와 비슷한 보안 및 미미한 성능 상의 문제가 있습니다. 하지만 지역 범위에 접근할 수 있는 eval과 달리, Function 생성자는 오직 전역 범위에서만 실행되는 함수를 생성합니다.
참고 : Function()은 new를 사용하여 호출하거나 없이 호출할 수 있습니다. 두 방법 모두 새로운 Function 인스턴스를 생성합니다.
함수가 공식적인 인수 이름으로 사용할 이름. 각 이름은 유효한 JavaScript 매개변수를 나타내는 문자열이어야 합니다(일반 식별자, 나머지 매개변수, 또는 구조 분해된 매개변수 중 하나이며, 선택적으로 기본값을 가질 수 있음). 또는 이런 문자열들이 쉼표로 구분된 목록이어야 합니다.
매개변수는 함수 표현식과 동일한 방식으로 구문 분석되기 때문에 공백과 주석이 허용됩니다. 예: "x", "theValue = 42", "[a, b] /* numbers */" 또는 "x, theValue = 42, [a, b] /* numbers */". ("x, theValue = 42", "[a, b]"도 맞지만 읽기가 매우 혼란스러울 수 있습니다.)
functionBody함수 정의를 구성하는 JavaScript 문이 포함된 문자열.
Function 생성자를 사용하여 생성된 Function 객체는 함수가 생성될 때 구문 분석됩니다. 이는 함수 표현식이나 함수 선언을 사용하여 함수를 생성하고 코드 내에서 호출하는 것보다 비효율적입니다. 이런 함수들은 코드의 나머지 부분과 함께 구문 분석되기 때문입니다.
함수에 전달된 모든 인수 중 마지막을 제외한 나머지는 생성될 함수의 매개변수 식별자의 이름으로, 전달된 순서대로 처리됩니다. 함수는 동적으로 함수 표현식으로 컴파일되며, 다음과 같은 방식으로 소스가 조합됩니다.
이는 함수의 toString() 메서드를 호출하여 관찰할 수 있습니다.
그러나 일반적인 함수 표현식과는 달리, anonymous라는 이름이 functionBody의 범위에 추가되지 않습니다. 이는 functionBody가 전역 범위에만 접근할 수 있기 때문입니다. 만약 functionBody가 엄격 모드(함수 본문 자체가 "use strict" 지시어를 가져야 합니다. 문맥으로부터 엄격 모드 설정을 상속받지 않기 때문입니다)에 있지 않다면, 함수 자체를 참조하기 위해 arguments.callee를 사용할 수 있습니다. 대안으로, 재귀 부분을 내부 함수로 정의할 수 있습니다.
두 개의 동적으로 조합된 소스 부분 — 매개변수 목록 args.join(",")와 functionBody — 은 각각 구문적으로 유효한지 확인하기 위해 먼저 별도로 구문 분석됩니다. 이는 주입 공격과 같은 시도를 방지합니다.
다음 코드는 두 개의 인수를 받는 Function 객체를 생성합니다.
인수 a와 b는 함수 본문 return a + b에서 사용하는 공식적인 인수 이름입니다.
| ECMAScript® 2027 Language Specification # sec-function-constructor |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025년 10월 9일 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.