사례 1: eval에 함수가 없으므로 직접 실행:
eval("alert('ss');");//모든 브라우저가 올바르게 출력합니다.
사례 2: eval에 함수가 있고, 함수가 즉시 실행됩니다:
eval("(function(){alert('ss');})();");//모든 브라우저가 올바르게 출력됩니다.
사례 3: eval에 함수가 있습니다. , 변수를 사용하여 함수 참조를 저장하고 다음 함수를 호출합니다.
var f=eval("(function(){alert('ss');})")
f();//Error IE에서 보고됨: 개체 누락, 다른 브라우저는 정상입니다
eval에서 함수를 정의하고 이를 변수로 반환하면 IE에서 개체 누락이라는 오류를 보고합니다. IE에서는 eval에 정의된 함수가 eval 외부로 성공적으로 반환되지 않는 것을 볼 수 있습니다.
해결 방법: 함수 개체를 실행 결과로 반환:
방법 1:
var f=eval("(function(){ return function(){alert ( 'ss');}})()");
f();//모든 브라우저는 즉시 실행되는 함수를 호출하기 위해
eval을 올바르게 출력합니다. 함수가 실행된 후 함수 객체를 반환합니다. . 함수 객체의 참조가 외부 변수에 성공적으로 반환된 경우입니다.
방법 2:
var f=eval("(false||function(){alert('ss');})")
f();// 모든 브라우저에서
을 성공적으로 출력했습니다. 이 메서드는 jquery에서도 사용됩니다. 이 함수는 or 표현식의 실행 결과로 반환되므로 문제를 성공적으로 해결할 수도 있습니다. 물론, 표현식은 위의 false||function(){}에만 국한되지 않습니다. 다양한 표현식이 성공적으로 함수를 반환할 수 있는 한 문제를 해결할 수 있습니다:
/* 및 표현식: */
var f=eval("(true&&function(){alert('ss');})");
f();//모든 브라우저는 정상적으로 출력됩니다
/* 삼항 표현식 :*/
var f=eval("(true?function(){alert('ss');}:'');")
f();//모든 브라우저가 정상적으로 출력됩니다.