Конвенции за деклариране на функционален израз

Нов съм в js и понякога ми е трудно да свикна с неговите кодови конвенции. Така че имам въпрос, как трябва да декларирам функционален израз? Погледнете моя код, правилно ли е как го направих или има по-добри практики?

function onAddButtonClick() {
    var engWord = document.getElementById('engWord'),
        japWord = document.getElementById('japWord'),
        engVal = engWord.value,
        japVal = japWord.value,
        engExpr = (engVal !== ""),
        japExpr = (japVal !== ""),
        duplicateNum,
        checkImg,
        numOfWords;

    duplicateNum = (function () {
        var i,
            pair;

        for (i = 0; i < dictionary.length; i++) {
            pair = dictionary[i];
            if (pair.eng === engVal && pair.jap === japVal) {
                return 3;
            } else if (pair.jap === japVal) {
                return 2;
            } else if (pair.eng === engVal) {
                return 1;
            }
        }
        return 0;
    }());

    //remove focus from inputs
    engWord.blur();
    japWord.blur();
    ...
}

Благодаря предварително.


person Azaro    schedule 16.04.2014    source източник


Отговори (1)


Справихте се добре. Използването на началния ( не е синтактично задължително в този контекст, но прави страхотно предупреждение за човешкия читател на кода за това, което се случва. Конвенцията помага.

В края, извикващите скоби () могат да влизат вътре или извън затварящото ). Дъг Крауфорд препоръчва вътре и много линтери проверяват за това. Въпреки твърденията му за кучешки топки1 , наистина няма значение.

Между другото, идеята функционалният израз да бъде деклариран и след това незабавно да се изпълнява се нарича IFFE -- Immediately Invoked Function Expression

person Jeremy J Starcher    schedule 16.04.2014
comment
Благодаря за отговора. Какво ще кажете за смесване на декларации на променливи и инициализация, но поставяне на инициализацията на „функционален израз“ отделно, както в моя случай? - person Azaro; 16.04.2014
comment
За мен се свежда до конкретни случаи. Използвам много IFFEs, но също така съм известен с това, че местя всичките си функции и понякога им давам конкретни имена. Наименуваните функции имат предимството, че името може да бъде документация за това, което функцията прави. - person Jeremy J Starcher; 16.04.2014