простреленная нога по-берлински

у наших разработчиков есть интересная особенность оформления кода внутри модуля. Если им нужно объявить функцию внутри замыкания, они не идут простым путём, и не пишут что-то вроде

function a() {
    // …
}

нет, объявление функции не для них. Вместо этого они объявляют переменную в var и присваивают ей значение, вот так:

var a = function() {
    // …
};

особенно смешно это сочетается с попытками использовать JSLint, который ругается на попытки использовать не только функции, но и переменные до их объявления.

но это ещё не всё! Одна из команд, видимо по привычке, использует этот стиль, но не использует JSLint. Конечно же, когда перед тобой несколько экранов кода, легко забыть, что это всё ещё «объявление переменных», и поставить точку с запятой в конце строки. Или не поставить, тут это без разницы:

var a = 123,
    b = function(){};
    c = b(a),
    d = c + 1;

в обоих случаях эта строчка станет последней строчкой var, и все объявленные позже переменные утекут в глобальную область имён. Гип-гип-ура!

за несколько месяцев я раз десять обнаруживал и чинил такие вот «протечки». А когда на этот код всё-таки напустили JSLint, он нашёл только забытый кем-то debugger;. Вот и получилось, что для нас JSLint создал больше проблем, чем решил

вообще, по-моему, это очень иронично: JSLint заявляет своей целью отказ от «опасных» подходов написания кода, но сам в то же время заставляет использовать другой опасный подход

Артемий Трегубенко,

comments powered by Disqus