> 웹 프론트엔드 > JS 튜토리얼 > JavaScript_javascript 기술의 eval() 함수 사용 소개

JavaScript_javascript 기술의 eval() 함수 사용 소개

WBOY
풀어 주다: 2016-05-16 16:23:08
원래의
1458명이 탐색했습니다.

JavaScript에서는 eval() 함수를 사용하여 문자열의 JavaScript 코드를 구문 분석하고 해당 코드 실행 결과를 반환할 수 있습니다.


코드 복사 코드는 다음과 같습니다.

console.log(eval("42 * 2"));//84


기본적으로 eval()은 JavaScript 전역 객체의 함수입니다. 예를 들어 위 코드는 다음과 동일합니다.


코드 복사 코드는 다음과 같습니다.

console.log(this.eval("42 * 2"));//84


그러나 eval() 문을 사용할 때에는 위의 첫 번째 방법, 즉 전역 객체를 무시하고 eval()을 직접 사용하는 것이 일반적이다.

eval() 사용법

다음 두 가지 이유 때문에 꼭 필요한 경우가 아니면 코드에서 eval() 문을 사용하지 않는 것이 좋습니다. ​​

1. 논리적으로 말하면 문자열은 프로그램 실행 중에 내용과 정보를 저장하는 데 사용되어야 하며 특정 계산 논리를 저장하는 데 사용되어서는 안 됩니다.
2. eval() 매개변수는 문자열이고 문자열은 어휘적으로 처리될 수 없으므로 JavaScript 인터프리터는 eval() 호출 문을 최적화할 수 없습니다.

eval()의 반환 값

eval()의 반환 값은 다음 규칙을 따릅니다.

1. eval()의 매개변수가 문자열이 아닌 경우 eval()은 매개변수를 직접 반환합니다.
2. eval()의 매개변수가 문자열인 경우 eval()은 문자열을 코드로 구문 분석하여 실행하고, 코드 실행의 마지막 줄 결과를 반환합니다.
3. 문자열을 유효한 코드로 구문 분석할 수 없는 경우 eval()은 SyntaxError를 발생시킵니다.
4. 문자열을 합법적인 코드로 구문 분석할 수 있지만 이 코드를 실행하는 동안 오류가 보고되면 해당 오류는 eval() 문에 보고되고 eval()에 의해 발생됩니다.

코드 복사 코드는 다음과 같습니다.

console.log(eval([1,2,3]));//[1, 2, 3]
console.log(typeof eval([1,2,3]));//객체

console.log(eval("42 */ 2"));//SyntaxError
console.log(eval("42 * 2; 22 * ​​​​3;"));//66. eval은 마지막 표현식/문의 결과를 반환합니다
console.log(eval("null.toString()"));//TypeError, 평가된 코드의 예외는 eval() 외부로 전파됩니다.

가변적인 환경

JavaScript의 Eval()에는 중요한 기능이 있습니다. eval() 매개변수 문자열의 코드는 외부 코드의 변수에 액세스할 수 있고 매개변수 문자열 코드에서 새로 생성된 변수를 외부 코드에 노출할 수도 있습니다. 즉, eval() 매개변수 문자열을 합법적으로 구문 분석할 수 있는 경우 JS는 eval()이 있는 줄을 구문 분석된 코드로 대체합니다.

코드 복사 코드는 다음과 같습니다.

//가변 환경
var a = 108;
console.log(eval("function double(x){return x*2;} a = double(a)"));
console.log(a);//216
console.log(double(33));//66


위의 기능을 구현하기 위한 전제 조건은 eval() 매개 변수 문자열의 코드를 합법적으로 구문 분석할 수 있다는 점에 주목할 가치가 있습니다. 코드의 올바른 구문 외에도 JS는 eval() 매개변수 문자열의 코드가 "자체 포함"되어야 한다고 요구합니다. 즉, 코드는 매개변수 문자열의 코드에 관한 한 의미가 있어야 합니다. 예를 들어 "return;"과 같은 문자열을 eval() 함수에 전달할 수 없습니다.


코드 복사 코드는 다음과 같습니다.
함수 테스트(){
var s = "테스트";
eval("return s;");
}
test();//SyntaxError: 함수에 반환되지 않음

eval() 함수를 직접 사용하는 경우 eval() 매개변수 문자열의 코드에서 액세스하는 변수는 eval() 문이 있는 함수의 변수, 즉 eval()에서 사용하는 환경 변수입니다. 함수는 "지역 변수 환경"입니다. eval() 함수를 직접 사용하지 않고 eval() 함수를 가리키는 새 변수를 사용하는 경우 해당 매개변수 문자열의 코드에서 액세스하는 변수는 전역 변수, 즉 eval()에서 사용되는 변수입니다. eval() 함수는 "전역 변수 환경"입니다.


코드 복사 코드는 다음과 같습니다.

//지역변수 환경과 전역변수 환경
var 이름 변경 = eval;
var x = "원산지", y = "원산지";
함수 f(){
var x = "새";
eval("x = '변경됨';");
x를 돌려주세요;
}
함수 g(){
var y = "새 항목";
renamed("y = '변경됨';");
y를 반환합니다;
}
console.log(f(), x);//new원본 변경됨
console.log(g(), y);//새 OriginChanged


그러나 IE6, 7, 8의 동작이 다르다는 점은 주목할 가치가 있습니다. IE6, 7, 8에서는 eval() 함수의 이름이 바뀌더라도 "로컬 변수 환경"이 계속 사용됩니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿