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 중국어 웹사이트의 기타 관련 기사를 참조하세요!