-1

Closure Compilerを使用すると、高度なモードでコンパイルすると次のエラーが発生します: (シンプル モードとホワイトスペースのみのモードでは、コードはまったく問題になりません)。

JSC_REDECLARED_VARIABLE: Redeclared variable: e at line 31 character 9
} catch (e) {
         ^
JSC_REDECLARED_VARIABLE: Redeclared variable: e at line 34 character 9
} catch (e) {
         ^

Closure Compiler によってエラーとして記述されるコードは次のとおりです。

function getXMLHttp() {
    var xmlHttp;
    try {
        xmlHttp = new XMLHttpRequest();
    } catch (e) {
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                return false;
            }
        }
    }
    return xmlHttp;
}

詳細モードを使用しているときにこの問題が発生する理由はわかりません。コンパイラがこれもエラーであると言う理由がわかりません。

(簡単な注意: このコードは、IE を処理するためのエラー キャッチ処理で PHP ファイルを要求する単純な XML 要求です。私の JavaScript コードはすべて正常に動作します。)

4

2 に答える 2

2

ee2およびe3例外を使用して、簡単に取り除くことができます。それは汚いですが、それでも良い回避策です。

于 2012-07-15T20:22:44.883 に答える
0

を使用する方法eでは問題はなく、コードは期待どおりに動作するはずですが、次のようなことをしたい場合:

try {
    xmlHttp = new XMLHttpRequest();
} catch (e) {
    try {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            return false;
        }
    }
    console.log(e); // Now there is a chance that e refer to the "wrong" exception
}

eクロージャ コンパイラはこれを予測し、 catch ステートメントごとに再宣言するため、警告をスローします。

ThiefMaster が示唆しているように、警告を取り除きたい場合はe2、単に変数の名前を などに変更できます。e3

于 2012-07-15T20:30:31.377 に答える