Для JSLint try..catch
имеет неявный эффект объявления e
в качестве локальной переменной.Поскольку у вас есть два таких блока в одной и той же функции (в JavaScript нет области видимости), JSLint видит это как объявление переменной, которая уже была объявлена .
Именование переменных e1
, e2
, и т. Д. предотвратит это предупреждение от JSLint.Правда ли это проблема?Спецификация ECMAScript 5, раздел 12.14, гласит: «Независимо от того, как элемент управления покидает блок, LexicalEnvironment всегда возвращается в свое прежнее состояние».На самом деле это действительно так:
try {
throw new Error("testing 1234");
} catch(fooBarBaz){
alert("Catch: " + fooBarBaz); // works
}
alert(fooBarBaz); // throws exception
Итак, в заключение, это просто ограничение JSLint и вряд ли приведет к какой-либо практической проблеме.