>웹 프론트엔드 >JS 튜토리얼 >JavaScript 전역 함수 평가 및 기타 예제의 정의, 사용법 및 부작용에 대한 자세한 설명

JavaScript 전역 함수 평가 및 기타 예제의 정의, 사용법 및 부작용에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-25 14:00:182650검색

eval()은 JavaScript 소스 코드로 구성된 문자열을 해석하고 실행하기 위해 eval()을 사용합니다. 매개변수를 직접적으로 사용합니다. 매개변수가 문자열이면 해당 문자열을 자바스크립트 코드로 컴파일합니다. 컴파일이 실패하면 SyntaxError 예외가 발생합니다. 컴파일이 성공하면 이 코드의 실행이 시작되고 문자열의 마지막 표현식이나 명령문의 값이 반환됩니다. 마지막 표현식이나 명령문에 값이 없으면 최종적으로 undefound가 반환됩니다. 문자열에서 예외가 발생하면 예외는 eval()에 대한 호출을 전달합니다.


var result = eval('3+2');
console.log(result,typeof result);//5 'number'

Scope

eval()은 호출되는 가변 범위 환경을 사용합니다. 즉, 변수의 값을 조회하고 로컬 범위의 코드와 정확히 동일한 새 변수 및 함수를 정의합니다. 문자열은 최상위 전역 코드로 실행됩니다. 실행된 코드는 새로운 전역변수와 전역함수를 정의하거나 전역변수에 값을 할당할 수 있으나, 함수 내에서 지역변수를 사용하거나 수정할 수는 없습니다


var num = 1;
var str = 'test';
console.log(eval(num));//1
console.log(eval(str));//ReferenceError: test is not defined 
var strLong1 = 'var x = 1;var y = 2;';
console.log(eval(strLong1),x,y);//undefined 1 2
var strLong2 = 'var x = 1; x++;';
console.log(eval(strLong2),x);//1 2

  [참고] IE8 - 브라우저는 eval(를 통해 별칭 )은 eval()

side effect


 JavaScript 해석기에서 많은 코드 분석과 최적화를 수행했습니다. eval()의 문제점은 동적 실행에 사용되는 코드를 일반적으로 분석할 수 없으므로 인터프리터가 이를 최적화할 수 없어 성능 저하로 이어진다는 것입니다. setTimeout() 및 setInterval(), new Function( ) 등. 이러한 함수는 문자열을 매개변수로 사용하고 프로그램이 실행될 때 동적으로 실행될 수 있습니다. 이 실행 메커니즘의 이점은 성능 손실을 상쇄할 수 없으므로


엄격 모드

사용을 피해야 합니다. eval() 함수는 너무 강력하므로 엄격 모드는 이에 대해 엄격한 제한을 적용합니다


【1】eval() 함수를 통해 변수나 함수를 생성할 수 없지만 해당 값을 쿼리하고 변경할 수 있습니다



var b = 2;
function foo(str,a){
eval(str);
console.log(a,b);
}
foo('var b = 3;',1);//1 3

【2】eval을 식별자로 사용하는 것은 금지됩니다

으아악

위 내용은 JavaScript 전역 함수 평가 및 기타 예제의 정의, 사용법 및 부작용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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