情況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();//所有瀏覽器正常輸出