Соглашения для объявления выражения функции

Я новичок в 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
Сводится к конкретным случаям для меня. Я использую много IFFE, но я также известен тем, что иногда перемещаю все свои функции и даю им определенные имена. Преимущество именованных функций состоит в том, что имя может быть документацией того, что делает функция. - person Jeremy J Starcher; 16.04.2014