0

InternetExplorerで壊れているレガシーアプリケーションに取り組んでいます。次のコードがあります。

スクリプト1: /* Call script 2 */; x.a(b)

スクリプト2: eval(script3)

スクリプト3: var x = x || {}; x.a = function(){ ... }

Firefoxでは、これは期待どおりに機能します。

ただし、Internet Explorerでは、「xは未定義です」と表示されて失敗します(これは大幅に簡略化されています)。コードのこの時点までさかのぼってx、スクリプト3で定義されていることを確認しましたが、スタックをスクリプト2に戻すと、可用性/スコープが失われます(console.logステートメントを両方に配置してテストしました-IEはスクリプト3のものでは問題ありませんが、スクリプト2)のものではクラッシュしました。

Internet Explorerやeval()関数がこれを引き起こすのはどうですか?それを修正するための私のオプションは何ですか?

4

2 に答える 2

0

この場合、変数xが宣言される前に、スクリプト 3 をvar x; x = x || {}; x.a = function(){ ... }
変数のプリエンプティブな使用が原因で発生した可能性があります。 スクリプト 2 で変数 x が使用できないという事実は、メソッドが「 x is undefined」 で突然失敗したためです。実際には、スクリプト 3 を参照するコードの断片からほんの少ししか理解 できませんでした。今よりも役に立つかもしれません。 お役に立てれば
eval()


于 2012-10-03T13:38:28.547 に答える
0

テストを設定して、自分の目で確かめてみませんか?

これが1つです:http://jsfiddle.net/Y3bf5/

IE7+では問題なく動作するようです。

于 2012-10-03T13:14:15.590 に答える