亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

javascript中eval和with用法實例總結

2024-05-06 16:25:32
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了javascript中eval和with用法,結合實例形式總結分析了JavaScript中eval和with的功能、用法與相關注意事項,具有一定參考借鑒價值,需要的朋友可以參考下
 

本文實例講述了javascript中eval和with用法。分享給大家供大家參考,具體如下:

我們都知道javascript的作用域機制,但是with和eval有時會“破壞”我們對于作用域的常規理解。下面參考網上資源和自己理解總結一下eval和with的用法。

一、eval

1、eval函數:把一個字符串當作一個js表達式一樣去執行它.

2、語法:eval(strScript) 注:參數strScript是必填項

3、使用說明

(1)它是有返回值的,如果參數字符串是一個表達式,就會返回表達式的值。如果參數字符串不是表達式,沒有值,那么返回“undefined”。
(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(); 

5、eval和作用域

(1)經典代碼分析

a、常見

var str = "global";function test() {  alert(str); //undefined  var str = "local";}test();alert(str); //global

分析:如我們預期的那樣,得到指定值。test函數內的str沒有var和有var聲明,結果也是不一樣的,讀者可自行驗證。

b、eval替代直接聲明變量的寫法

var str = "global";function test() {  alert(str); //??  eval("var str='local';");//會像我們預期的那樣嗎?  //var str = "local";  alert(str); //這里又是什么結果?}test();alert(str); //??

分析:對比a中的寫法,我們只是在test函數里用eval語句替換直接聲明var定義變量那一句最后alert一下而已,結果出入很大。

(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}

對于IE瀏覽器,函數execScript用于在全局空間執行代碼。
對于Firefox瀏覽器,直接調用eval函數,則在調用者的空間執行;如果調用window.eval則在全局空間執行;但是alert(eval==window.eval)的返回值是true,奇怪的ff.

b、調用a的測試代碼

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函數聲明的全局函數)

分析:通過b中的代碼,你可能已經發現了eval定義全局代碼的一個顯而易見的不方便的地方,就是對于全局代碼,js智能提示(這里是vs,可能其他工具也會)完全失去提示作用。由此你肯定會問,程序中通過eval這種方式定義了很多全局代碼,它的可維護性會不會太那個了?我的看法就是贊成網上的總結,少用eval。畢竟現成的工具都不能很好的提示了,而程序員的視力往往又不是那么好。

二、with

1、with語句:為一個或一組語句指定默認對象,通常用來縮短特定情形下必須寫的代碼量
2、語法:with (<對象>) <語句>
with (object) 
  statements 
(1)參數object: 新的默認對象;
(2)statements : 一個或多個語句,object 是該語句的默認對象。

3、示例:

function withTest() { with (document) { //document的重復使用 writeln("Hello,"); writeln("it's a with keyword test!"); } with (Math) { //Math的重復使用 alert(random()); alert(abs(-10)); }}withTest();

4、with會暫時修改作用域鏈

function withTest() { var userName = "jeff wong"; //暫時修改作用域鏈 with (document) { writeln("Hello,"); writeln(userName); }//with內的語句執行完之后,作用域鏈恢復原狀 alert(userName);}withTest();

分析: 函數withTest在定義的時候,就確定了withTest的作用域鏈,我們暫且認為這條作用域鏈的最頂端是window對象,當withTest被執行的時候,js引擎生成了一個call object(調用對象)并將其添加到作用域鏈尾部上(window對象之后),語句運行到with(document)時,將生成新的作用域(實質上這個作用域和普通function的作用域一樣,只不過它在with子句執行完,該作用域也隨之消失)并添加到作用域鏈的尾部,所以with之內的變量查找,就會優先從這條鏈的with(document)作用域上查找,然后從withTest的call object中查找,最后查找window。with內的語句執行完之后,作用域鏈恢復原狀(with(document)生成的作用域被移出作用域鏈)。

ps:with是不被推薦的,因為需要操作作用域鏈(移進、移出作用域),執行效率低下。

希望本文所述對大家JavaScript程序設計有所幫助。



注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久躁日日躁aaaaxxxx| 日韩电影中文字幕| 久久影视电视剧免费网站清宫辞电视| 欧美在线日韩在线| 日韩av在线电影网| 亚洲片在线观看| 国内外成人免费激情在线视频网站| 欧美与欧洲交xxxx免费观看| 成人av色在线观看| 国产成人免费av| 亚洲最大福利视频网| 国产69精品99久久久久久宅男| 久久免费视频在线观看| 中文字幕av一区| 亚洲人成电影网站色| 国产91精品黑色丝袜高跟鞋| 综合激情国产一区| 日韩极品精品视频免费观看| 国产精品一二三视频| 欧美日韩性视频| 91在线观看免费| 九九精品在线视频| 啪一啪鲁一鲁2019在线视频| 国产日韩av在线播放| 国产精品久久久久久久天堂| 欧美在线视频观看| 亚洲精品www久久久| 26uuu日韩精品一区二区| 亚洲成av人片在线观看香蕉| 欧美尤物巨大精品爽| 欧美性xxxxhd| 欧美日韩日本国产| 欧美理论电影网| 中文字幕免费精品一区| 九九精品在线观看| 欧美日韩成人网| 亚洲自拍偷拍色片视频| 欧美激情中文字幕在线| 91精品视频专区| 97香蕉超级碰碰久久免费软件| 亚洲一区二区三区四区视频| 亚洲第一视频在线观看| 色综合视频网站| 狠狠躁18三区二区一区| 97国产真实伦对白精彩视频8| 久热在线中文字幕色999舞| 中文字幕亚洲欧美日韩2019| 亚洲aⅴ男人的天堂在线观看| 97精品伊人久久久大香线蕉| 午夜精品久久久久久久男人的天堂| 欧美裸身视频免费观看| 色老头一区二区三区在线观看| 久久久久久久国产精品视频| 欧美性感美女h网站在线观看免费| 91九色在线视频| 亚洲午夜av久久乱码| 精品视频在线播放| 欧美激情亚洲一区| 8090理伦午夜在线电影| 亚洲精品国精品久久99热一| 久久久久久久久91| 日韩av在线直播| 亚洲精品福利在线观看| 欧美激情亚洲精品| 久久久精品一区二区三区| 久久精品精品电影网| 国产精品久久久久久一区二区| 国产精品国产福利国产秒拍| 尤物99国产成人精品视频| 久久久之久亚州精品露出| 亚洲精品在线看| 中文字幕亚洲欧美一区二区三区| 国产精品1区2区在线观看| 欧美专区第一页| 欧美大片免费观看| 搡老女人一区二区三区视频tv| 精品亚洲一区二区三区在线观看| 久久久99久久精品女同性| 全色精品综合影院| 国产日韩精品入口| 国产精品96久久久久久| 欧美激情a∨在线视频播放| 日韩av大片在线| 国产精品久久电影观看| 精品综合久久久久久97| 亚洲国产精品成人va在线观看| 精品福利在线观看| 一区二区欧美日韩视频| 久久精品影视伊人网| 中文字幕日韩av| 国产精品第三页| 日韩成人中文字幕在线观看| 国产精品一区二区在线| 91亚洲国产成人精品性色| 91国产视频在线播放| 国产精品久久久av久久久| 国产精品视频自拍| 成人xvideos免费视频| 国产一区香蕉久久| 日本老师69xxx| 揄拍成人国产精品视频| 色综久久综合桃花网| 日韩高清电影免费观看完整版| 4k岛国日韩精品**专区| 亚洲成人动漫在线播放| 午夜精品久久久久久99热| 久久99国产精品久久久久久久久| 综合久久五月天| 91性高湖久久久久久久久_久久99| 国产精品国产福利国产秒拍| 亚洲电影免费观看高清| 午夜欧美不卡精品aaaaa| 日韩欧美主播在线| 国产成人a亚洲精品| 日韩欧美在线观看视频| 国产精品久久久亚洲| 久久久亚洲国产天美传媒修理工| 欧美在线亚洲一区| 日韩经典第一页| 国产亚洲美女久久| 国产精品国产三级国产aⅴ9色| 欧美日韩国产中字| 久久久久日韩精品久久久男男| 国产欧美va欧美va香蕉在| 亚洲精品在线91| 国产欧美日韩视频| 亚洲图片制服诱惑| 亚洲在线第一页| 国产亚洲欧洲高清一区| 久久久久久69| 久久亚洲精品网站| 91久久国产精品| 亚洲精品电影网在线观看| 亚洲国产精品人久久电影| 国产日韩在线精品av| 精品久久久久久久中文字幕| 午夜美女久久久久爽久久| 一区二区三区 在线观看视| 黄网站色欧美视频| 国产一区二区三区久久精品| 日韩在线播放av| 欧美多人乱p欧美4p久久| 亚洲女性裸体视频| 日本国产欧美一区二区三区| 麻豆一区二区在线观看| 大荫蒂欧美视频另类xxxx| 欧美日韩另类字幕中文| 国产精品久久久久久亚洲影视| 国产一区二区三区毛片| 亚洲视频欧洲视频| 国产成人久久久| 国产精品96久久久久久| 亚洲欧美一区二区激情| 欧美老女人www| 在线播放国产一区中文字幕剧情欧美| 一色桃子一区二区| 中文字幕最新精品| 亚洲第一天堂无码专区| 日韩中文字幕在线精品| 日韩av免费一区| 国产91成人video| 日韩欧美精品网址| 亚洲香蕉伊综合在人在线视看| 91在线免费观看网站|