ホームページ > 記事 > ウェブフロントエンド > eval が function_javascript スキルに遭遇したときの IE の処理
ケース 1: eval に関数がないため、直接実行します:
eval("alert('ss');");//すべてのブラウザは
を正しく出力します ケース 2: eval に関数があり、関数はすぐに実行されます:
eval("(function(){alert('ss');})();");//すべてのブラウザは正しく出力します
ケース 3: eval に関数があります、変数を使用して関数参照を保存し、この関数を呼び出します:
var f=eval("(function(){alert('ss');})"); IE でレポート: オブジェクトが見つかりません。他のブラウザは正常です
eval で関数を定義し、それを変数に返すと、IE はエラー: オブジェクトが見つかりません をレポートします。 IE の eval で定義された関数が eval の外部に正常に返せないことがわかります。
解決策: 関数オブジェクトを実行結果として返します:
方法 1:
var f=eval("(function(){ return function(){alert ( 'ss');}})()");
f();//すべてのブラウザは、すぐに実行される関数を呼び出すための
eval を正しく出力します。関数が実行された後、関数オブジェクトが返されます。 . これは、関数オブジェクトの参照が外部変数に正常に返された場合です。
方法 2:
var f=eval("(false||function(){alert('ss');})");
f();//すべてのブラウザは
を正常に出力します。このメソッドは jquery でも使用されており、この関数は or 式の実行結果として返されます。これにより、問題も正常に解決されます。もちろん、式は上記の false||function(){} に限定されません。関数:
/* および式: */
を正常に返すことができる限り、さまざまな式が問題を解決できます。 var f=eval("(true&&function(){alert('ss');})");
f();//すべてのブラウザは正常に出力します
/* 三項式 :*/
var f=eval("(true?function(){alert('ss');}:'');");
f();//すべてのブラウザは正常に出力します