eval의 기능은 실제로 매우 간단합니다. 문자열을 JS 인터프리터에 전달하면 Javascript 인터프리터가 해당 문자열을 Javascript 코드로 해석하여 실행합니다.
가장 간단한 예:
< script type="text/javascript">
eval("alert(1 1)");
문자열을 JS로 해석합니다. 코드가 실행되고 2가 나타납니다.
물론 위의 예는 단지 장난감일 뿐이고, 현실에서 사용할 정도로 멍청한 사람은 없을 것입니다. eval 함수를 사용하는 가장 기본적인 방법은 DOM에 있다고 생각합니다. 예를 들어 div1, div2, div3이 있는 경우 document.getElementByID를 사용할 때 ID를 얻을 수 있는 방법이 없습니다. 그러한 프로그램을 연결하려면 eval을 사용하십시오. 예:
가장 기본적인 사용법을 말씀드리자면 아직도 이 기능에 관심이 많으실 것 같습니다. 지루한. 그럼 eval() 함수를 하나씩 살펴보겠습니다.
eval의 범위부터 시작하여 이 함수를 살펴보겠습니다.
>
코드는 매우 간단하며 결과가 팝업될 수 있습니다. 3. 다음으로, 이 코드를 비교하세요:
결과적으로 3이 먼저 나타난 다음 정의되지 않습니다.
그럼 설명하세요. eval() 함수에 의해 동적으로 실행되는 코드는 새 범위를 생성하지 않으며 해당 코드는 현재 범위에서 실행됩니다. 즉, eval() 함수는 현재 범위의 this, 인수 및 기타 개체를 사용할 수도 있습니다.
IE에서는 eval()과 매우 유사한 execScript()라는 함수가 지원됩니다. 간단한 코드를 작성할 수 있습니다.
결과적으로 3이 2개나 나오는데, 이는 우선 eval과 유사하다는 점이기도 합니다. 문자열을 JS로 해석 코드가 실행되지만 해당 범위는 현재 범위가 아니라 전역 범위입니다. 위의 코드를 Firefox와 Google Chrome에 넣고 시도해 보면 execScript의 코드가 Firefox에서 유효하지 않다는 것을 알게 되는데, 이는 또한 execScript 코드의 브라우저 호환성에 문제가 있음을 나타냅니다.
그러면 이 두 기능의 '장점', 즉 글로벌 브라우저 호환성을 어떻게 결합할 수 있는지에 대한 질문으로 이어집니다. 제가 직접 인터넷에서 검색해서 정리해 보면 이렇습니다.
이것은 FF 및 IE와 완벽하게 호환됩니다. 필수 코드는 FF에서 eval과 window.eval이 동일하지 않다는 것입니다.
또한 eval을 사용하여 몇 가지 이상한 트릭을 수행할 수도 있습니다.
일반적으로 다음과 같은 코드를 작성할 수 있습니다.
또는 다음과 같습니다.