DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> IE 當eval遇上function的處理
IE 當eval遇上function的處理
編輯:關於JavaScript     
情況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();//所有浏覽器正常輸出
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved