任何人都可以解释为什么:
function doAjax() { var xmlHttpReq = false; try { // Firefox, Opera 8.0+ and Safari xmlHttpReq = new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Your browser does not support AJAX. Please use an AJAX compatible browser."); return false; } } } xmlHttpReq.open('GET', 'handler.php', true); xmlHttpReq.onreadystatechange = function() { if (xmlHttpReq.readyState == 4) { var response = xmlHttpReq.responseText; handleAjaxResponse(response); } }; xmlHttpReq.send(null); return true; }
导致以下验证错误:
Error: Implied global: ActiveXObject 8, XMLHttpRequest 4, alert 15, handleAjaxResponse 24 Problem at line 10 character 16: 'e' is already defined. catch (e) { Problem at line 14 character 20: 'e' is already defined. catch (e) {
由JSlint.com javascript验证器
关于第一个错误,这里是JSLint文档的一个例外:
未定义的变量和函数
JavaScript最大的问题是它依赖于全局变量,特别是隐含的全局变量.如果未显式声明变量(通常使用var语句),则JavaScript假定变量是全局变量.这可以掩盖拼写错误的名称和其他问题.
JSLint期望在使用或调用所有变量和函数之前声明它们.这允许它检测隐含的全局变量.这也是一种很好的做法,因为它使程序更容易阅读.
有时文件依赖于全局变量和其他地方定义的函数.您可以通过在文件中包含注释来标识这些注释,这些注释列出了程序所依赖的全局函数和对象,但未在程序或脚本文件中定义.
全局声明可能如下所示:
/*global getElementByAttribute, breakCycles, hanoi */
全球宣言始于
/*global
.请注意,g之前没有空格.您可以拥有任意数量的/*global
评论.它们必须在使用它们指定的变量之前出现.
关于您的问题,以下部分最有可能帮助您解决错误:
可以为您预定义一些全局变量.选择"假设浏览器(浏览器)"选项(请参阅下面的"选项")以预定义Web浏览器提供的标准全局属性,例如窗口和文档以及警报.选择Assume Rhino(rhino)选项以预定义Rhino环境提供的全局属性.选择"假设Yahoo Widget(小部件)"选项以预定义Yahoo!提供的全局属性.小部件环境.
在第二个错误是因为给你再使用变量" e
"为每个异常,包括嵌套的.重命名每个异常的变量以避免这种情况.