在高级模式下编译时Closure编译器出错

时间:2012-07-15 20:20:30

标签: javascript google-closure-compiler

当我使用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;
}

为什么在使用高级模式时会出现此问题,我不知道。我不知道为什么编译器说这也是一个错误。

(快速注意:这个代码只是一个简单的XML文件请求,用于处理IE的错误捕获处理中的PHP文件。我所有的JavaScript代码都可以正常工作。)

2 个答案:

答案 0 :(得分:2)

您可以使用ee2e3轻松排除异常。这很脏但仍然是一个很好的解决方法。

答案 1 :(得分: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
}

闭包编译器会预测到这一点,并抛出一个警告,因为你为每个catch语句重新声明e

正如ThiefMaster建议的那样,如果你想摆脱警告,你可以简单地将变量重命名为e2e3等等。