-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;
}

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

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

4

2 回答 2

2

e您可以通过使用,e2e3为您的例外轻松摆脱它。这很脏,但仍然是一个很好的解决方法。

于 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 回答