>웹 프론트엔드 >JS 튜토리얼 >JavaScript에서 `eval()`과 `new Function()`을 언제 사용해야 합니까?

JavaScript에서 `eval()`과 `new Function()`을 언제 사용해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-04 16:07:02433검색

When to Use `eval()` vs `new Function()` in JavaScript?

JavaScript에서 eval()과 new Function() 구별

JavaScript에서 개발자는 비슷한 작업을 수행하는 것처럼 보이는 두 가지 함수를 자주 접합니다. : eval() 및 new Function(). 두 함수 모두 문자열을 코드로 평가하지만 기본 메커니즘과 의미는 크게 다릅니다.

eval() 및 new Function()

eval() 함수는 문자열을 평가합니다. 문자열을 현재 실행 범위 내의 JavaScript 표현식으로 사용합니다. 이는 현재 범위에 정의된 지역 변수에 액세스할 수 있음을 의미합니다. 대조적으로, new Function()은 문자열에 저장된 JavaScript 코드를 호출할 수 있는 함수 객체로 구문 분석합니다. 이 함수 개체는 별도의 범위에서 생성되므로 호출 환경의 로컬 변수에 액세스할 수 없습니다.

이러한 차이점을 설명하려면 다음 코드를 고려하세요.

var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}

console.log(evaluate('2 + 1'));
console.log(func('2 + 1'));

두 함수 모두 예상 결과 3을 출력합니다. 그러나 지역 변수를 활용하도록 코드를 수정하면 차이점이 분명해집니다.

function test1() {
    var a = 11;
    eval('(a = 22)'); // Modifies the local variable within the `test1` function
    alert(a);            // Alerts 22
}

이 경우 eval()은 test1 함수의 범위 내에서 평가가 발생하기 때문에 지역 변수 a를 수정합니다. 그러나 대신 new Function('return (a = 22);')()을 사용하면 코드가 별도의 범위에서 실행되기 때문에 로컬 변수 a는 영향을 받지 않습니다.

보안 및 고려 사항

eval() 및 new Function()을 신뢰할 수 없는 데이터와 함께 사용할 경우 보안 위험이 발생할 수 있다는 점에 유의하는 것이 중요합니다. 악의적인 입력은 잠재적으로 민감한 정보를 노출하거나 임의 코드를 실행할 수 있습니다. 따라서 반드시 필요한 경우가 아니면 이러한 함수는 사용하지 않는 것이 좋습니다.

결론

요약하면 JavaScript에서는 eval()과 new Function()이 다르게 작동합니다. eval()은 현재 실행 범위 내에서 문자열을 평가하는 반면, new Function()은 평가를 위한 새 범위를 생성합니다. 효과적인 JavaScript 프로그래밍과 보안 유지를 위해서는 이러한 차이점을 이해하는 것이 중요합니다.

위 내용은 JavaScript에서 `eval()`과 `new Function()`을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.