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