javascript, khi chạy qua JSLint hét lên với tôi và tôi không chắc chắn lý do.JSLint phàn nàn về việc thử/bắt của tôi
/*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();
Nó nói với tôi:
Vấn đề ở dòng 12 kí tự 11: 'e' đã được xác định.
} catch(e) {
Nó dường như là khó chịu mà tôi có một giây catch(e)
. Tại sao đây lại là một vấn đề? Liệu nó không chỉ đơn giản là đặt e để biến địa phương bên trong khối catch? Tôi có cần phải đặt tên duy nhất các biến cục bộ cho tất cả các lỗi bị mắc kẹt trong một hàm không?
Có vẻ như bạn đã đúng. Tôi đoán rằng try/catch không _not_ giới thiệu phạm vi, như đã được chứng minh bằng cách kiểm tra nhanh chóng này tôi đưa ra: http://jsfiddle.net/VRcwV/ –
Oh chỉ thấy các chỉnh sửa! Vì vậy, nó không giới thiệu phạm vi, nhưng biến cục bộ được tạo ra bởi câu lệnh catch không có sẵn bên ngoài bắt. Vì vậy, nó giới thiệu một chút phạm vi chuyên ngành chỉ cho ngoại lệ đó? –
@Squeegy: IE 8 là * không * tuân thủ, có vẻ như. Hãy thử kiểm tra của tôi (http://jsfiddle.net/DpHMt/) trong trình duyệt đó, và bạn sẽ thấy * cả hai * hộp cảnh báo đang mở. – PleaseStand