IE 當eval遇上function的處理

來源:互聯網
上載者:User

情況1:eval裡沒有function,直接執行:
eval("alert('ss');");//所有瀏覽器正確均輸出
情況2:eval裡有function,function立即執行:
eval("(function(){alert('ss');})();");//所有瀏覽器正確輸出
情況3:eval裡有function,使用變數儲存function引用並調用該function:
var f=eval("(function(){alert('ss');})");
f();//IE下報錯:缺少對象 其他瀏覽器正常
當在eval定義一個function並返回給變數時,IE報錯:缺少對象。可見IE下eval裡定義的function並不能成功返回到eval外部。

解決方案:使function對象作為一個執行結果返回:

方法1:

var f=eval("(function(){ return function(){alert('ss');}})()");
f();//所有瀏覽器正確輸出
eval裡調用一個立即執行的函數,該函數執行之後返回一個function對象,此時該function對象的引用成功返回到外部變數。

方法2:

var f=eval("(false||function(){alert('ss');})");
f();//所有瀏覽器成功輸出
該方法也是jquery裡使用的方法,function作為或運算式的執行結果返回,同樣能成功解決問題。當然,運算式並不局限於上面的false||function(){},各種運算式只要能成功返回function,均可解決問題:

/* 與運算式:*/
var f=eval("(true&&function(){alert('ss');})");
f();//所有瀏覽器正常輸出

/* 三元運算式:*/
var f=eval("(true?function(){alert('ss');}:'');");
f();//所有瀏覽器正常輸出

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.