在IE下,当eval遇上function
在IE下,當(dāng)eval遇上function,IE下會出現(xiàn)怪異情況,我們用例子一步步說明
情況1:eval里沒有function,直接執(zhí)行:?
eval("alert('ss');");//所有瀏覽器正確均輸出?
情況2:eval里有function,function立即執(zhí)行:?
eval("(function(){alert('ss');})();");//所有瀏覽器正確輸出?
情況3:eval里有function,使用變量保存function引用并調(diào)用該function:?
var f=eval("(function(){alert('ss');})");?
f();//IE下報(bào)錯(cuò):缺少對象 其他瀏覽器正常?
當(dāng)在eval定義一個(gè)function并返回給變量時(shí),IE報(bào)錯(cuò):缺少對象。可見IE下eval里定義的function并不能成功返回到eval外部。?
解決方法:使function對象作為一個(gè)執(zhí)行結(jié)果返回:?
方法1:?
var f=eval("(function(){ return function(){alert('ss');}})()");?
f();//所有瀏覽器正確輸出?
eval里調(diào)用一個(gè)立即執(zhí)行的函數(shù),該函數(shù)執(zhí)行之后返回一個(gè)function對象,此時(shí)該function對象的引用成功返回到外部變量。?
方法2:?
var f=eval("(false||function(){alert('ss');})");?
f();//所有瀏覽器成功輸出?
該方法也是jquery里使用的方法,function作為或表達(dá)式的執(zhí)行結(jié)果返回,同樣能成功解決問題。當(dāng)然,表達(dá)式并不局限于上面的false||function(){},各種表達(dá)式只要能成功返回function,均可解決問題:?
/* 與表達(dá)式:*/?
var f=eval("(true&&function(){alert('ss');})");?
f();//所有瀏覽器正常輸出?
/* 三元表達(dá)式:*/?
var f=eval("(true?function(){alert('ss');}:'');");?
f();//所有瀏覽器正常輸出
轉(zhuǎn)載于:https://my.oschina.net/liangzhenghui/blog/213519
總結(jié)
以上是生活随笔為你收集整理的在IE下,当eval遇上function的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas读取excel带汉字的列头_
- 下一篇: 管理与决策这属于计算机在什么方面的应用,