JSLint предложения за for цикли

Създадох for цикъл в JavaScript, който изглежда по следния начин:

for (var i = 0; i < element[child].length; i++) {
    ...some code...
}

Въпреки това, когато стартирам JSLint върху него, той се оплаква, че „var i“ трябва да бъде преместен в началото на функцията (което ми се струва странно да правя) и също така се оплаква, че ++ на „i++“ е неочакван. Това е тази част, която наистина намирам за странна - защо ++ е неочакван и с какво трябва да бъде заменен?


person user5013    schedule 15.10.2013    source източник
comment
Дъглас Крокфорд (който написа JSLint) предпочита i = i + 1 по някаква причина. Можете да превключите опцията, за да разрешите i++, като използвате опцията plusplus: true. Декларирането на var в горната част на функцията най-вероятно е свързано с повдигане. Не знам каква е опцията JSLint за това.   -  person Andy    schedule 15.10.2013
comment
Докато мисля за това, всъщност намирам повдигането на декларациите на променливи за наистина удобно, ако пиша сложен код. Когато видя, че съм декларирал голям брой от тях, мога да започна да проверявам дали функцията трябва да бъде разбита на по-малки компоненти.   -  person Andy    schedule 15.10.2013


Отговори (3)


Той казва да преместите var i навън. Трябва да е нещо като:

function foo() {
    "use strict";
    var i, element, child;

    //...set element/child...

    for (i = 0; i < element[child].length; i += 1) {
        //...some code...
    }
}

Тук има хубава публикация, обхващаща темата ++: Защо да избягваме увеличаването (+ +) и оператори за намаляване (--) в JavaScript?

person epascarello    schedule 15.10.2013

Променливите трябва да бъдат декларирани в горната част на функцията, защото това е, което JavaScript така или иначе прави (известно е като „повдигане на променливи“), така че JSLint смята, че е ясно те винаги да са там.

Относно i++, той иска да използвате i += 1. От JSLint документи:

Известно е, че операторите ++ (увеличаване) и -- (намаляване) допринасят за лош код, като насърчават прекомерната хитрост. Те са на второ място след дефектната архитектура в разрешаването на вируси и други заплахи за сигурността. Освен това объркването преди/след инкремент може да доведе до отделни грешки, които са изключително трудни за диагностициране. Има опция plusplus, която позволява използването на тези оператори.

Накратко, JSLint вярва, че е зло, което е противоречиво. Вижте също: http://jslinterrors.com/unexpected-plus-plus/

person bfavaretto    schedule 15.10.2013
comment
Има ли причина Дъглас Крокфор да гледа с недоверие на ++? Според него до какви грешки може да доведе и това? - person user5013; 15.10.2013
comment
Той най-вече смята, че това може да доведе до (логическо) объркване. Освен това може да доведе до грешки (вижте stackoverflow.com/ въпроси/14325011/). Аз лично харесвам тези оператори, Крокфорд е твърде радикален. - person bfavaretto; 15.10.2013

Честно казано, мисля, че кодът ви е наред и проблемът е по-скоро в това, че JSLint е твърде придирчив. Когато пусна кода ви през JSHint, не получавам проблеми: http://www.jshint.com/

Не забравяйте, че JSLint често ще бъде много придирчив дори ако нещо все още работи правилно. Просто трябва да знаете кога да приемете съвета му и кога да го пренебрегнете :)

person cardern    schedule 15.10.2013