eval의 기능은 실제로 매우 간단합니다. JS 인터프리터에 문자열을 전달하면 Javascript 인터프리터가 해당 문자열을 Javascript 코드로 해석하여 실행합니다. 가장 간단한 예를 들어보세요. 코드 복사 코드는 다음과 같습니다. <br>eval("alert(1 1)") <br>script> <br> </div> <br>매우 간단합니다. into JS 코드가 실행되고 2가 팝업됩니다. <br><br>물론 위의 예시는 그저 장난감일 뿐, 현실에서 사용할 정도로 멍청한 사람은 없을 것입니다. eval 함수를 사용하는 가장 기본적인 방법은 DOM에 있다고 생각합니다. 예를 들어 div1, div2, div3이 있는 경우 document.getElementByID를 사용할 때 ID를 얻을 수 있는 방법이 없습니다. 그러한 프로그램을 연결하려면 eval을 사용하십시오. 예: <br><div class="codetitle"> <span><a style="CURSOR: pointer" data="66004" class="copybut" id="copybut66004" onclick="doCopy('code66004')"><u>코드 복사</u></a></span> 코드는 다음과 같습니다.</div> <div class="codebody" id="code66004"> <br><script type=" text/javascript "> <br>for (var loop = 1; loop < 10; loop ) { <BR>eval('document.getElementById("div" loop).innerHTML="123"'); <BR>} <BR>script> <br> </div> <br>가장 기본적인 사용법을 말씀드리자면, 아직까지 이 기능에 이런 기능만 있다면 너무 지루할 것 같습니다. 그럼 eval() 함수를 하나씩 살펴보겠습니다. <br><br> eval의 범위부터 시작하여 이 함수를 살펴보겠습니다. <br><div class="codetitle"> <span><a style="CURSOR: pointer" data="43977" class="copybut" id="copybut43977" onclick="doCopy('code43977')"><u>코드 복사</u></a></span> 코드는 다음과 같습니다. </div> <div class="codebody" id="code43977"> <br><script type="text/javascript"> <br>eval("var i=3") <br>alert(i) <br>script> 🎜> <br>코드는 매우 간단하며 결과가 팝업될 수 있습니다. 3. 다음으로, 이 코드를 비교하세요: </div> <br><br><div class="codetitle"> <span>코드 복사 <a style="CURSOR: pointer" data="83498" class="copybut" id="copybut83498" onclick="doCopy('code83498')"><u></u> 코드는 다음과 같습니다: </a></span> </div><script type ="text/javascript"> <div class="codebody" id="code83498">var test = function () { <br>eval("var i=3") <br>alert(i) <br>test() ; <br>alert(i); <br>script> <br><br> <br>결과는 3이 먼저 나타난 다음 정의되지 않습니다. <br> </div>그럼 설명하세요. eval() 함수에 의해 동적으로 실행되는 코드는 새 범위를 생성하지 않으며 해당 코드는 현재 범위에서 실행됩니다. 즉, eval() 함수는 현재 범위의 this, 인수 및 기타 개체를 사용할 수도 있습니다. <br><br>IE에서는 eval()과 매우 유사한 함수인 execScript()가 지원됩니다. 간단한 코드를 작성할 수 있습니다. <br><br><br><br><div class="codetitle">코드 복사<span><a style="CURSOR: pointer" data="64936" class="copybut" id="copybut64936" onclick="doCopy('code64936')"><u> 코드는 다음과 같습니다.</u></a> </span><script type="text/javascript "> </div>var test = function () { <div class="codebody" id="code64936">execScript("var i=3"); <br>alert(i); <br>} <br>test(); <br>alert( i); <br>script> <br><br> <br>결과적으로 3이 2개가 나오는데, 이는 우선 eval과 유사하며 문자열을 해석할 수 있다는 점이기도 합니다. JS 코드로 변환하여 실행하지만 해당 범위는 현재 범위가 아니라 전역 범위입니다. 위의 코드를 Firefox와 Google Chrome에 넣고 시도해 보면 execScript의 코드가 Firefox에서 유효하지 않다는 것을 알게 되는데, 이는 또한 execScript 코드의 브라우저 호환성에 문제가 있음을 나타냅니다. <br> </div>그러면 이 두 기능의 "장점", 즉 글로벌 브라우저 호환성을 어떻게 결합할 수 있는지에 대한 질문으로 이어집니다. 제가 직접 인터넷에서 검색해서 정리해 보면 이렇습니다. <br><br><br><br><div class="codetitle">코드 복사<span><a style="CURSOR: pointer" data="47182" class="copybut" id="copybut47182" onclick="doCopy('code47182')"><u> 코드는 다음과 같습니다.</u></a> </span><script type="text/javascript"> </div>var StrongEval = function (code) { <div class="codebody" id="code47182">if (window.navigator.userAgent.indexOf("MSIE") >= 1) { <br>execScript(코드); <br>} <br>if (window.navigator.userAgent.indexOf("Firefox") >= 1) { <br>window.eval(code) <br>} <br>else { <br>execScript(코드) <br>} <br>}; <br>var Test = function () { <br>StrongEval("var i=3") <br>} 🎜> 테스트(); <br>경고(i) <br>스크립트><br>이것은 FF 및 IE와 완벽하게 호환됩니다. 필수 코드는 FF에서 eval과 window.eval이 동일하지 않다는 것입니다. <br><br>또한 eval을 사용하여 몇 가지 이상한 트릭을 수행할 수도 있습니다. <br><br>일반적으로 다음과 같은 코드를 작성할 수 있습니다. <br><div class="codetitle"> <span><a style="CURSOR: pointer" data="73885" class="copybut" id="copybut73885" onclick="doCopy('code73885')"><u>코드 복사</u></a></span> 코드는 다음과 같습니다.</div> <div class="codebody" id="code73885"> <br>var obj = function () { <br>this.a = 1; <br>this.b = 2 <br>this.c = 5; () { <br>this.c = this.a this.b; <br>var o = new obj() <br>o.fun(); (o.c ; <br>var obj = { <br>a: 1, <br>b: 2, <br>c: 5, <br>fun: function () { </div>this.c = this.a this.b ; <br>} <br>} <div class="codetitle"><span> <a style="CURSOR: pointer" data="93775" class="copybut" id="copybut93775" onclick="doCopy('code93775')">또는 다음: <u></u></a></span></div>코드 복사<div class="codebody" id="code93775"> <br><br> 코드는 다음과 같습니다: <br><br> <br>var obj = function () { <br>this.a = 1 <br>this.b = 2; }; <br>obj.prototype.fun = function () { <br>this.c = this.a this.b </div>} <br>var o = new obj() <br>o.fun; () ; <div class="codetitle">alert(o.c); <span><a style="CURSOR: pointer" data="60663" class="copybut" id="copybut60663" onclick="doCopy('code60663')"> <u>아무튼 피곤하시죠? 그렇다면 적어도 감각적으로는 좀 더 편안할 수 있도록 전혀 다른 접근 방식을 취해보자. </u></a></span> </div> <div class="codebody" id="code60663">코드 복사<br><br><br> 코드는 다음과 같습니다.<br><br> <br><script type="text/javascript "> <br>var funtemp = function () { <br>c = a b; <br>} <br>var obj = { <br>a: 1, <br>b: 2, </div>c: 5 <br>}; <br>var fun; <div class="codetitle">with (obj) { <span>eval("fun = " funtemp) <a style="CURSOR: pointer" data="59999" class="copybut" id="copybut59999" onclick="doCopy('code59999')">fun(); c); <u>script> </u></a> </span>너무 강렬해서 너무 좋아요. 보기에 편할지 말지는 논하지 않겠습니다. 그러한 상황에 대해 논의해 봅시다. </div> <div class="codebody" id="code59999"> <br><br><br>코드 복사<br><br><br> 코드는 다음과 같습니다.<br><br> <br><script>var DBCommon = function ( ) { <br>alert("1."); <br>alert("2."); <br>alert("3."); <br> 경고("4."); <br>alert("5."); <br>} <br>var SQLServerCommon: 함수() { Alert(" SQL Server 연결 설정") }, <br>OpenConnection: function () { Alert("SQL Server 연결 열기") }, </div>CreateCommand: function () { Alert("SQL 생성 서버 명령"); }, <br>ExcuteCommand: function () { Alert("DSQL Server 명령 실행"); }, <br>CloseConnection: function () { Alert("SQL Server 연결 닫기"); } <div class="codetitle">}; <span>var OracleCommon = { <a style="CURSOR: pointer" data="35432" class="copybut" id="copybut35432" onclick="doCopy('code35432')">CreateConnection: function () { Alert("Oracle 연결 설정") }, <u>OpenConnection: function () { Alert("Oracle 연결 열기"); }, </u>CreateCommand : function () { 경고("¨Oracle 명령 생성") }, </a>ExcuteCommand: function () { 경고("DOracle 명령 실행") }, </span>CloseConnection: 함수 ( ) { 경고("Oracle 연결 닫기") } </div>}; <div class="codebody" id="code35432">with (SQLServerCommon) { <br>eval("forSQLServer=" DBCommon) <br>} <br>with (OracleCommon) <br>eval(" forOracle=" DBCommon) <br>} <br>forSQLServer(); <br>forOracle(); <br>script> <br><br> <br> a simple 템플릿 메소드 패턴은 어떻습니까? 헤헤. 함수의 컨텍스트를 변경하기 위해 eval 및 with를 사용하여 이를 호출할 수도 있습니다. <br><br>하지만 Eval은 일반적인 상황에서는 거의 사용되지 않으므로 완전히 사용하지 않을 수 있습니다. <br> </div> </div>