반응형
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
반응형
'Frontend > JavaScript' 카테고리의 다른 글
[JS] 오브젝트(Object) Key, Value에 접근하기 (0) | 2021.09.06 |
---|---|
[JS] 함수 표현식과 함수 선언식 (0) | 2021.09.05 |
[JS] 자바스크립트 eval( ) (0) | 2021.09.04 |
[JS] 객체를 복사하는 메서드(assign) (0) | 2021.09.01 |
[JS] 화살표 함수(Arrow Functions) (0) | 2021.08.31 |
최근댓글