Ale*_*yne 8 javascript error-handling exception-handling jslint try-catch
当jSLint运行时,javascript 对我大喊大叫,我不知道为什么.
/*jslint browser: true, devel: true, evil: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, newcap: true, immed: true */
var foo = function() {
try {
console.log('foo');
} catch(e) {
alert(e);
}
try {
console.log('bar');
} catch(e) {
alert(e);
}
};
foo();
Run Code Online (Sandbox Code Playgroud)
它告诉我:
第12行字符11的问题:'e'已经定义.
} catch(e) {
我有一秒钟似乎很不高兴catch(e).为什么这会成为问题?它不是简单地将e设置为catch块内的局部变量吗?我是否需要为函数中所有陷阱错误唯一命名局部变量?
对于JSLint,try..catch具有声明e为局部变量的隐含效果.因为在同一个函数中有两个这样的块(JavaScript中没有块作用域),JSLint认为它是声明一个已经声明的变量.
命名变量e1,e2,等会阻止的JSLint此警告.这真的是个问题吗?ECMAScript 5规范第12.14节说:"无论控制如何离开Block,LexicalEnvironment总是恢复到以前的状态." 事实上,这确实是这样的:
try {
throw new Error("testing 1234");
} catch(fooBarBaz){
alert("Catch: " + fooBarBaz); // works
}
alert(fooBarBaz); // throws exception
Run Code Online (Sandbox Code Playgroud)
因此,总而言之,这只是JSLint的一个限制,不太可能导致任何实际问题.
| 归档时间: |
|
| 查看次数: |
2653 次 |
| 最近记录: |