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

首頁 > 編程 > JavaScript > 正文

javascript eval(func())使用示例

2019-11-20 21:30:55
字體:
來源:轉載
供稿:網友

eval的作用其實很簡單,就是把一段字符串傳遞給JS解釋器,由Javascript解釋器將這段字符串解釋成Javascript代碼,并且執行他。

舉個最簡單的例子:

復制代碼 代碼如下:

<script type="text/javascript">
eval("alert(1+1)");
script>

很簡單,把字符串解釋成JS代碼并執行,彈出2。

當然,上面的例子只是個玩具,在實際中沒有人會傻到這么用。我想大家最基本的使用eval函數都是應該在DOM中,例如我們有div1,div2,div3,那么在document.getElementByID時我們的ID沒有辦法去得到,那么最簡單的辦法就是在for循環中,使用eval來拼接這么一段程序。例如這樣:
復制代碼 代碼如下:

<script type="text/javascript">
for (var loop = 1; loop < 10; loop++) {
eval('document.getElementById("div"+loop).innerHTML="123"');
}
script>

最基本的用法說完,相信大家還是對這個函數意猶未盡,如果這個函數只有這么點用法,那就太無聊了。那我們就一點點來剖下一下eval()函數。

我們就先從eval的作用域說起,先看這樣一段函數:
復制代碼 代碼如下:

<script type="text/javascript">
eval("var i=3");
alert(i);
script>

代碼很簡單,結果可以彈出3。接下來再對比這段代碼:
復制代碼 代碼如下:

<script type="text/javascript">
var test = function () {
eval("var i=3");
alert(i);
}
test();
alert(i);
script>

結果是首先彈出3,然后是undefined。

那么說明:eval()函數動態執行的代碼并不會創建新的作用域,其代碼就是在當前的作用域執行的。因此也就是說,eval()函數也完全可以使用當前作用域的this,argument等對象。

在IE中,支持這樣一種和eval()非常類似的函數叫做:execScript()。我們可以來寫段簡單的代碼。
復制代碼 代碼如下:

<script type="text/javascript">
var test = function () {
execScript("var i=3");
alert(i);
}
test();
alert(i);
script>

結果彈出了2個3,這也就看出了execScript函數的特點,首先他和eval相類似,都能將字符串解釋成JS代碼并且執行,但是他的作用域不是當前作用域,而是全局作用域。當我們把上面的代碼放到Firefox和谷歌瀏覽器上去試試:發現在Firefox上execScript上代碼是無效的,那么也說明一個問題,execScript代碼的瀏覽器兼容性是有問題的。

那么就引申出這樣一個問題,我們如何能把這兩個函數的“優點”給匯總到一起呢,也就是說,全局+瀏覽器兼容性。上網搜了下,自己給匯總了一下,大概是這樣:
復制代碼 代碼如下:

<script type="text/javascript">
var StrongEval = function (code) {
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
execScript(code);
}
if (window.navigator.userAgent.indexOf("Firefox") >= 1) {
window.eval(code);
}
else {
execScript(code);
}
};
var Test = function () {
StrongEval("var i=3");
}
Test();
alert(i);
script>

這樣就可以完美地兼容FF和IE了,其本質代碼就在于在FF中eval和window.eval并不等效,這是個很奇妙的事。

另外,我們還可以用eval+with實現一些奇淫技巧。

我們在一般意義上可以寫出這樣的代碼:
復制代碼 代碼如下:

var obj = function () {
this.a = 1;
this.b = 2;
this.c = 5;
this.fun = function () {
this.c = this.a + this.b;
}
};
var o = new obj();
o.fun();
alert(o.c);

或者是這樣:
復制代碼 代碼如下:

var obj = {
a: 1,
b: 2,
c: 5,
fun: function () {
this.c = this.a + this.b;
}
}

再或者是這樣:
復制代碼 代碼如下:

var obj = function () {
this.a = 1;
this.b = 2;
this.c = 5;
};
obj.prototype.fun = function () {
this.c = this.a + this.b;
}
var o = new obj();
o.fun();
alert(o.c);

無論怎么樣,你是不是對這樣的this感覺厭煩了呢?那就讓我們采取個很另類的辦法吧,讓至少在感官上可能會舒服一點。
復制代碼 代碼如下:

<script type="text/javascript">
var funtemp = function () {
c = a + b;
}
var obj = {
a: 1,
b: 2,
c: 5
};
var fun;
with (obj) {
eval("fun = " + funtemp);
}
fun();
alert(obj.c);
script>

這個很勉強,那么好,我們不討論什么看著舒服不舒服。我們來討論這樣一種情況。
復制代碼 代碼如下:

<script>
var DBCommon = function () {
alert("1."); CreateConnection();
alert("2."); OpenConnection();
alert("3."); CreateCommand();
alert("4."); ExcuteCommand();
alert("5."); CloseConnection();
}
var SQLServerCommon = {
CreateConnection: function () { alert("建立SQL Server連接"); },
OpenConnection: function () { alert("打開SQL Server連接"); },
CreateCommand: function () { alert("創建¨SQL Server命令"); },
ExcuteCommand: function () { alert("執行DSQL Server命令"); },
CloseConnection: function () { alert("關閉SQL Server連接"); }
};
var OracleCommon = {
CreateConnection: function () { alert("建立¢Oracle連接"); },
OpenConnection: function () { alert("打開aOracle連接"); },
CreateCommand: function () { alert("創建¨Oracle命令"); },
ExcuteCommand: function () { alert("執行DOracle命令"); },
CloseConnection: function () { alert("關閉?Oracle連接"); }
};
with (SQLServerCommon) {
eval("forSQLServer=" + DBCommon);
}
with (OracleCommon) {
eval("forOracle=" + DBCommon);
}
forSQLServer();
forOracle();
script>

我們又是否可以把這個看成是一個簡陋的模板方法模式呢?呵呵。我們也可以把這個稱為利用eval和with配合改變函數的上下文。

不過話又說回來,Eval在一般的情況中是很少被用到的,我們是完全可以避免來使用它的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2019最新中文字幕| 久久成人精品视频| 2018中文字幕一区二区三区| 日韩欧美在线第一页| 永久免费看mv网站入口亚洲| 狠狠色香婷婷久久亚洲精品| 国产精品天天狠天天看| 国产精品久久av| 3344国产精品免费看| 亚洲理论片在线观看| 亚洲人在线视频| 亚洲色图第一页| 亚洲第一av网站| 国产在线一区二区三区| 午夜精品一区二区三区在线视| 97视频免费在线观看| 欧美日韩一区免费| 国产97免费视| 日韩精品极品在线观看播放免费视频| 亚洲va久久久噜噜噜久久天堂| 自拍偷拍亚洲区| 国产美女搞久久| 欧美大尺度激情区在线播放| 国产成人精品免高潮费视频| 尤物99国产成人精品视频| 国产精品免费一区豆花| 最近2019好看的中文字幕免费| 精品国产一区二区三区久久狼5月| 成人免费视频网| 亚洲国产精品国自产拍av秋霞| 日韩av三级在线观看| 国产精品综合久久久| 久久在线观看视频| 久久99热精品| 欧美性xxxx在线播放| 亚洲人成电影网站色xx| 国产一区二区三区直播精品电影| 日韩av免费在线| 中文字幕亚洲第一| 欧美不卡视频一区发布| 这里精品视频免费| 亚洲一区二区三区sesese| 日韩美女视频免费在线观看| 亚洲日本中文字幕| 久久久久亚洲精品国产| 成人久久一区二区| 国产精品视频内| 亚洲欧美一区二区激情| 韩国国内大量揄拍精品视频| 日韩成人在线视频网站| 亚洲最大av网站| 精品视频在线导航| 亚洲精选在线观看| 亚洲乱码av中文一区二区| 久久香蕉国产线看观看网| 欧美成人在线免费视频| 亚洲自拍欧美另类| 日韩在线视频国产| 影音先锋欧美精品| 91日本在线观看| 欧美性猛交xxxx黑人猛交| 日韩在线观看精品| 亚洲理论电影网| 日韩欧美aⅴ综合网站发布| 一夜七次郎国产精品亚洲| 在线观看日韩专区| 日韩视频一区在线| 日韩av理论片| 欧美怡红院视频一区二区三区| 国产精品夜间视频香蕉| 国产精品视频专区| 久久久久久久一区二区三区| 久久99青青精品免费观看| 亚洲女人天堂色在线7777| 国产亚洲精品日韩| 色妞在线综合亚洲欧美| 日韩免费看的电影电视剧大全| 欧美视频中文字幕在线| 国产日韩欧美黄色| 国产精品一久久香蕉国产线看观看| 最近2019中文字幕mv免费看| 亚洲在线视频福利| 亚洲激情视频网站| 久久久久久久激情视频| 一区二区福利视频| 日韩一二三在线视频播| 91精品国产精品| 国产欧美va欧美va香蕉在线| 亚洲午夜精品视频| 国产精品福利在线| 国产精品日日摸夜夜添夜夜av| 亚洲级视频在线观看免费1级| 自拍偷拍亚洲区| 超碰精品一区二区三区乱码| 日韩电影中文字幕在线| 国产精品1234| 欧美成人精品影院| 欧美日韩国产中字| 久久久免费电影| 成人黄色午夜影院| 欧美国产亚洲精品久久久8v| 久久香蕉频线观| 欧美中文字幕在线播放| 国产成人在线播放| 国产精品自产拍在线观看| 中文字幕日本精品| 91av网站在线播放| 国产在线拍揄自揄视频不卡99| 91精品视频在线| 欧美一区亚洲一区| 欧美又大又硬又粗bbbbb| 欧美精品videossex性护士| 欧美极品美女视频网站在线观看免费| 欧美日韩国产第一页| 国产成人精品久久亚洲高清不卡| 日本人成精品视频在线| 精品亚洲精品福利线在观看| 色偷偷亚洲男人天堂| 在线观看成人黄色| 亚洲精品乱码久久久久久按摩观| 亚洲va欧美va在线观看| 亚洲区一区二区| 欧美性xxxx极品高清hd直播| 国产亚洲欧美另类中文| 91精品国产色综合久久不卡98| 日本欧美一二三区| 精品国产乱码久久久久久婷婷| 日韩在线观看网站| 久久免费成人精品视频| 日韩欧美中文字幕在线观看| 亚洲国产精品久久| 成人免费网站在线| 国产自产女人91一区在线观看| 亚洲国产精品高清久久久| 中文字幕亚洲欧美日韩高清| 美女性感视频久久久| 5252色成人免费视频| 成人免费视频在线观看超级碰| 色综合久久天天综线观看| 欧美性视频在线| 91精品视频免费| 欧美激情精品久久久久久蜜臀| 97视频在线观看免费高清完整版在线观看| 日韩精品视频在线观看免费| 欧美另类69精品久久久久9999| 日韩视频―中文字幕| 欧美色视频日本版| 欧美日韩久久久久| 亚洲区在线播放| 欧美午夜丰满在线18影院| 亚洲欧美在线看| 91精品国产91久久久久久| 亚洲天堂av在线免费| 亚洲自拍偷拍一区| 日韩在线一区二区三区免费视频| 国产精品日韩在线观看| 欧美日韩激情视频8区| 国产成人福利网站| 欧美精品第一页在线播放| 日韩欧美在线视频日韩欧美在线视频| 欧美精品在线免费播放| 亚洲天堂免费观看| 欧美高清视频一区二区| 成人h猎奇视频网站|