当我使用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代码都可以正常工作。)
答案 0 :(得分:2)
您可以使用e
,e2
和e3
轻松排除异常。这很脏但仍然是一个很好的解决方法。
答案 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建议的那样,如果你想摆脱警告,你可以简单地将变量重命名为e2
,e3
等等。