Подтвердить что ты не робот

Почему JSLint жалуется на "Неожиданный" еще после "возвращения"?

JSLint жалуется, что следующий (бесполезный пример) код недействителен:

(function (x) {
    "use strict";
    if (x === 1) {
        return 1;
    } else if (x === 2) {
        return -1;
    }
    return 0;
}(1));

Ошибка: Проблема с символом строки 4: Неожиданное "else" после "return".

return 1;

Является ли это всерьез предполагающим, что плохо использовать выражения return внутри структуры if/else?

Он считает, что эта версия в порядке:

(function (x) {
    "use strict";
    var returnval = 0;
    if (x === 1) {
        returnval = 1;
    } else if (x === 2) {
        returnval = -1;
    }
    return returnval;
}(1));
4b9b3361

Ответ 1

Это просто говорит вам, что else после return лишний. Хорошо:

(function (x) {
    "use strict";
    if (x === 1) {
        return 1;
    }  
    if (x === 2) {
        return -1;
    }
    return 0;
}(1));

Ответ 2

Что я нашел w/jslint, так это то, что если вы придерживаетесь правил - 50% смешны, но не оказывают негативного влияния на ваш код. Другие 50% (или около того) дадут вам хорошую выгоду. Так сделайте это для других 50%. Этот конкретный пример заставляет вас быть явным о обратном к условию или подобному... вместо того, чтобы позволить ему быть неявным с else... то же самое относится к if/else, который я имею в виду.

Ответ 3

Лучше иметь функцию всегда возвращать что-то, поскольку она добавляет последовательность. Известно, что JSLint является довольно строгим и ущемляет чувства программистов. Не могу помочь. Лично я думаю, что версия 1 прекрасна.