[JavaScript] eval()과 new Function()의 차이
참고 문서
function test1() {
var a = 111;
eval('console.debug(a); a = 222;'); // 111
console.debug(a); // 222
}
test1();
function test2() {
var b = 333;
new Function('console.debug(b);')(); // ReferenceError: b is not defined
}
test2();
내부 작동과 유효범위(혹은 scope)의 차이가 있다.
eval()
: 자바스크립트 표현식으로 문자열을 자바스크립트 코드로 해석한 후 이를 평가한다. 유효범위는eval()
의 호출 시점이다. 따라서 실행 범위 내의 지역변수에 접근할 수 있다.new Function()
: 주어진 문자열을 자바스크립트 코드로 파싱하여 호출 가능한 객체에 저장한다. 별도의 함수 영역으로 분리되기 때문에 유효범위는 분리되며 지역변수에 접근할 수 없다.