Javascript, po uruchomieniu JSLint krzyczy na mnie i nie jestem pewien dlaczego.JSLint narzeka na mój spróbuj/złap się
/*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();
Mówi mi:
Problem na linii 12 znaków 11: 'e' jest już zdefiniowany.
} catch(e) {
Wydaje się być zdenerwowany, że mam drugą catch(e)
. Dlaczego miałby to być problem? Czy nie ustawia się e zmiennej lokalnej na blok catch? Czy muszę jednoznacznie nazwać zmienne lokalne dla wszystkich wychwyconych błędów w funkcji?
Wygląda na to, że masz rację. Domyślam się, że try/catch nie _nie wprowadzają zakresu, o czym świadczy ten szybki test, który napisałem: http://jsfiddle.net/VRcwV/ –
Och właśnie zobaczyłem edycję! Nie wprowadza więc zakresu, ale zmienna lokalna utworzona przez instrukcję catch nie jest dostępna poza tym haczykiem. Czy wprowadzono niewielki zakres specjalistycznego zakresu tylko dla tego wyjątku? –
@Squeegy: IE 8 jest * niezgodny *, wydaje się. Wypróbuj mój test (http://jsfiddle.net/DpHMt/) w tej przeglądarce, a zobaczysz * oba * pola alertów otwarte. – PleaseStand