>  기사  >  웹 프론트엔드  >  JavaScript의 eval() 함수 반환 값과 변수 환경 사용 예에 ​​대한 자세한 설명

JavaScript의 eval() 함수 반환 값과 변수 환경 사용 예에 ​​대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-25 14:18:378552검색

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]));//object
console.log(eval("42 */ 2"));//SyntaxError
console.log(eval("42 * 2; 22 * 3;"));//66. eval returns the result of last expression/statement
console.log(eval("null.toString()"));//TypeError, exception in eval-ed code will be propagated outside eval().

가변 환경

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

//variable environment
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() 함수에 전달할 수 없습니다.

function test(){
  var s = "test";
  eval("return s;");
}
test();//SyntaxError: return not in function

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

//local variable environment and global variable environment
var renamed = eval;
var x = "origin", y = "origin";
function f(){
  var x = "new";
  eval("x += 'Changed';");
  return x;
}
function g(){
  var y = "new";
  renamed("y += 'Changed';");
  return y;
}
console.log(f(), x);//newChanged origin
console.log(g(), y);//new originChanged

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

위 내용은 JavaScript의 eval() 함수 반환 값과 변수 환경 사용 예에 ​​대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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