Front-end/JavaScript
[JavaScript] new Function
Nave
2022. 5. 9. 01:29
1. new Function
new Function 문법을 사용하면 함수를 만들 수 있다.
(하지만 잘 사용하는 방법이 아니며, 이 방법 외에는 대안이 없을 때 사용.)
let func = new Function ([arg1, arg2, ...argN], functionBody);
// 인수와 함수 본문으로 구성됨
new Function 예시
let sum = new Function('a', 'b', 'return a + b');
alert( sum(1, 2) ); // 3
// 인수가 있는 ver
let sayHi = new Function('alert("Hello")');
sayHi(); // Hello
// 인수가 없는 ver
--> 기존의 함수 생성방법과 new Function을 사용해 함수를 만드는 방법의 가장 큰 차이는 런타임에 받은 문자열을 사용해 함수를 만들 수 있다는 점이다.
(함수 표현식과 함수 선언문은 개발자가 직접 스크립트를 작성해야 했음)
?? 이부분 모르겠음.??
2 클로저와 new Function
new Function을 이용해 함수를 만들면 함수의 [[Environment]] 프로퍼티가 현재 렉시컬 환경이 아닌 전역 렉시컬 환경을 참조하게 됨.
따라서 new Function을 이용해 만든 함수는 외부 변수에 접근할 수 없고, 오직 전역변수에만 접근할 수 있다.
function getFunc() {
let value = "test";
let func = new Function('alert(value)');
return func;
}
getFunc()();
//ReferenceError: value is not defined
function getFunc() {
let value = "test";
let func = function() { alert(value); };
return func;
}
getFunc()();
//test