반응형

 

 

 

 

 

 

new Function()는 문자열을 코드로 인식해 실행한다는 점에서 eval 함수와 비슷하다.

( eval() : https://cocobi.tistory.com/76 )

 

하지만 new Function()은 함수 내부 Scope에만 접근과 수정이 가능하며

내부에서 선언된 변수 등은 해당 Function 안에서만 유효하기 떄문에 eval과 같은 보안 이슈가 없다. 

 

 

 

1. 문법

new Function()의 기본 문법은 다음과 같다.

let func = new Function ([arg1, arg2, ...argN], functionBody);

 

 

2. 활용 방법

 

인수가 없을 경우 다음과 같이 작성할 수 있다.

let hello = new Function('alert("Hello")');
hello(); // Hello

 

인수가 두 개인 함수의 경우 다음과 같이 작성할 수 있다.

var sum = new Function('a', 'b', 'return a + b'); // 기본 문법
sum = new Function('a,b', 'return a + b'); // 쉼표로 구분
sum = new Function('a , b', 'return a + b'); // 쉼표와 공백으로 구분

alert(sum(1, 2)); // 3

 

또한 동적으로 문자열을 전달받아 실행 할수도 있다.

let str = . . . // 코드 형태의 동적으로 전달받은 문자열

let func = new Function(str);
func();

 

 

 

3. 클로저

new Function을 이용해 만든 함수는 외부 변수에 접근할 수 없고, 오직 전역 변수에만 접근할 수 있다.

 

// 일반적인 함수 선언 방법
function getFunc() {
  let value = "test";
  let func = function() { alert(value); };
  return func;
}

getFunc()(); // test


// new Function()을 이용한 함수 선언
function getFunc() {
  let value = "test";
  let func = new Function('alert(value)');
  return func;
}

getFunc()(); // ReferenceError: value is not defined

 

 

 

 

 

#참고사이트

https://ko.javascript.info/new-function

 

 

 

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기