国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Javascript學習筆記4 Eval函數

2024-05-06 14:11:49
字體:
來源:轉載
供稿:網友
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) {
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 大悟县| 甘谷县| 六盘水市| 新晃| 鲜城| 宜宾县| 泰宁县| 永德县| 清原| 平罗县| 鄢陵县| 塔城市| 岑巩县| 和田县| 包头市| 汨罗市| 古田县| 历史| 德江县| 钟山县| 张北县| 嘉鱼县| 皮山县| 股票| 安乡县| 古蔺县| 澳门| 新源县| 怀化市| 安陆市| 延安市| 韩城市| 象州县| 抚顺市| 淮北市| 广平县| 德惠市| 扶沟县| 北流市| 体育| 平利县|