>웹 프론트엔드 >JS 튜토리얼 >Eval() 대 New Function(): 실제로 동일한 작업을 수행합니까?

Eval() 대 New Function(): 실제로 동일한 작업을 수행합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 00:11:29356검색

Eval() vs. New Function(): Do They Really Do the Same Thing?

eval()과 new Function()의 차이점 탐색

JavaScript에서는 eval()과 new Function()을 자주 비교합니다. 그들의 유사점과 차이점을 이해합니다. 이 문서에서는 동일한 작업을 수행하는지 조사하고 서로 다른 동작에 대한 자세한 설명을 제공합니다.

코드 예제

다음 코드 조각을 고려하세요.

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'));

이 코드에서 평가()는 eval()을 사용하여 문자열을 JavaScript 표현식으로 평가하는 반면, func()는 new Function() 생성자를 사용하여 문자열에서 함수 객체를 생성하고 즉시 실행합니다.

특이한 기능

두 함수 모두 문자열을 평가하지만 동일한 작업을 수행하지는 않습니다. 주요 차이점은 다음과 같습니다.

  • eval():

    • 현재 범위에서 문자열을 JavaScript 표현식으로 평가합니다.
    • 주변 코드 블록에 정의된 지역 변수에 액세스할 수 있습니다.
  • new Function():

    • 문자열을 함수 개체로 구문 분석합니다.
    • 주변 코드의 지역 변수와 격리하여 별도의 범위에서 함수를 실행합니다.

차이점 강조 예

다음 코드를 고려하세요.

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}

eval 대신 new Function('return (a = 22);')()가 사용된 경우 ()의 경우 new Function()이 주변 범위의 지역 변수에 액세스하지 않기 때문에 지역 변수 a는 원래 값을 유지합니다.

권장 사항 및 보안 고려 사항

일부 Douglas Crockford와 같은 JavaScript 개발자는 꼭 필요한 경우가 아니면 eval() 및 new Function() 사용을 권장하지 않습니다. 이 권장 사항은 두 함수 중 하나를 사용하여 신뢰할 수 없는 데이터를 평가하는 것이 위험할 수 있으므로 보안 문제에서 비롯됩니다.

따라서 일반적으로 eval() 또는 new Function( ).

위 내용은 Eval() 대 New Function(): 실제로 동일한 작업을 수행합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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