이 기사의 예에서는 javascript에서 eval과 with의 사용법을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
우리 모두는 JavaScript의 범위 메커니즘을 알고 있지만 때로는 eval과 함께 범위에 대한 기존의 이해를 "파괴"합니다. 온라인 리소스와 자신의 이해를 참조하여 eval의 사용법을 요약해 보겠습니다.
1. 평가
1. eval 함수: 문자열을 js 표현식으로 처리하여 실행합니다. 2. 구문: eval(strScript) 참고: strScript 매개변수가 필요합니다
3. 사용 지침
(1) 반환값이 있습니다. 매개변수 문자열이 표현식이면 해당 표현식의 값이 반환됩니다. 매개변수 문자열이 표현식이 아니고 값도 없으면 "정의되지 않음"이 반환됩니다.
(2) 매개변수 문자열이 코드로 실행될 때 eval 함수가 호출되는 컨텍스트와 관련됩니다. 즉, 여기에 나타나는 변수나 함수 호출은 eval이 호출되는 컨텍스트에서 사용 가능해야 합니다.
4. 예:
function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } } //eval,这个比较常用 var myTest = function() { return "eval test"; }; function evalTest() { //简单数据 alert(eval("1+1")); //2 alert(eval("'a'+1")); //a1 alert(eval("1+'a'")); //1a alert(eval("parseInt('a'+1)")); //NaN alert(eval("parseInt(1+'a')")); //1 alert(eval("true")); //true alert(eval("0==false")); //true alert(eval("1==undefined")); //false alert(eval("isNaN(undefined)")); //true //函数和对象 alert(eval("this")); //[object] alert(eval("typeof(this)")); //object alert(eval("typeof(test)")); //undefined alert(eval("evalTest")); //这个显示当前函数的定义语句细节,包含注释 //alert(eval("evalTest()")); //调用自己并执行,这个会有大问题啊! alert(eval("typeof(evalTest)")); //function //其他 var tmpFunc = "{a:1}"; alert(eval(tmpFunc)); //1 alert(eval("(" + tmpFunc + ")")); //[object object] alert(eval("tmpFunc")); //{a:1} //alert(eval("tmpFunc()")); //脚本错误 alert(myTest()); eval("alert(myTest())"); //和上面等价 alert(eval(myTest)); alert(eval("myTest")); //和上面等价 //form里的一个input,id=txtUserName eval("$('txtUserName').value='jeff wong';"); //等价于 $('txtUserName').value = 'jeff wong'; eval("alert( $('txtUserName').value);"); } evalTest();
(1) 클래식 코드 분석
공통
var str = "global"; function test() { alert(str); //undefined var str = "local"; } test(); alert(str); //global
변수를 직접 선언하는 대신 b, eval
var str = "global"; function test() { alert(str); //?? eval("var str='local';");//会像我们预期的那样吗? //var str = "local"; alert(str); //这里又是什么结果? } test(); alert(str); //??
(2) eval은 전역 코드를 정의합니다
a. IE, FF와 호환되며 전역 코드를 정의하는 eval 함수
var nav = new Object(); //通用eval函数 nav.Eval = function(jsCode) { if (document.all) //IE下是execScript execScript(jsCode); else window.eval(jsCode); //FF下是window.eval }
b.
var nav = new Object(); //通用eval函数 nav.Eval = function(jsCode) { if (document.all) //IE下是execScript execScript(jsCode); else window.eval(jsCode); //FF下是window.eval } function test() { nav.Eval("var str = 'global';"); //这里声明变量str,在外面的函数中可以调用变量 nav.Eval("var tmpFunc = function(){alert('global function');};"); //这里声明函数变量tmpFunc,在外面的函数中可以调用函数 alert(str); //global tmpFunc(); //global function } test(); alert(str); //global (调用nav.Eval函数声明的全局变量) tmpFunc(); // global function (调用nav.Eval函数声明的全局函数)
1.
with 문: 하나 또는 여러 문 그룹에 대한 기본 개체를 지정합니다. 일반적으로 특정 상황에서 작성해야 하는 코드의 양을 줄이는 데 사용됩니다.
2. 문법: (
(객체)와 함께
진술
(1) 매개변수 객체: 새로운 기본 객체
(2) 명령문: 하나 이상의 명령문, 개체는 명령문의 기본 개체입니다.
3. 예:
function withTest() { with (document) { //document的重复使用 writeln("Hello,"); writeln("it's a with keyword test!"); } with (Math) { //Math的重复使用 alert(random()); alert(abs(-10)); } } withTest();
function withTest() { var userName = "jeff wong"; //暂时修改作用域链 with (document) { writeln("Hello,"); writeln(userName); }//with内的语句执行完之后,作用域链恢复原状 alert(userName); } withTest();
ps: with는 범위 체인을 작동(범위 안팎으로 이동)해야 하므로 실행 효율성이 낮기 때문에 권장되지 않습니다.
이 기사가 JavaScript 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.