-
new Function 문법프로그래밍/Js 2021. 7. 5. 18:00
함수 표현식과 함수 선언문 이외에 함수를 만들 수 있는 방법이 하나 더 있다.
new Function 문법을 사용하면 함수를 만들 수 있다.
let func = new Function ([arg1, arg2, ...argN], functionBody);
새로 만들어지는 함수는 인수 arg1...argN 과 함수 본문 functionBody로 구성된다.
let sum = new Function('a', 'b', 'return a + b'); alert( sum(1, 2) ); // 3
기존에 사용하던 방법과 new Function을 사용해 함수를 만드는 방법의 가장 큰 차이는 런타임에 받은 문자열을 사용해 함수를 만들 수 있는 점이다.
보통 함수는 특별한 프로퍼티 [[Environment]]에 저장된 정보를 이용해 자기 자신이 태어난 곳을 기억한다.
[[Environment]]는 함수가 만들어진 렉시컬 환경을 참조한다.
하지만 new Function을 이용해 함수를 만들면 함수의 [[Environment]] 프로퍼티가 현재 렉시컬 환경이 아닌 전역렉시컬 환경을 참조한다.
function getFunc() { let value = "test"; let func = new Function('alert(value)'); return func; } getFunc()(); // ReferenceError: value is not defined
* 참조
'프로그래밍 > Js' 카테고리의 다른 글
var, let, const (0) 2022.03.23 call/apply와 데코레이터, 포워딩 (0) 2021.07.20 객체로서의 함수와 기명 함수 표현식 (0) 2021.07.02 JS-객체 (0) 2021.05.12 JS - 추상관계비교 (0) 2021.02.24