Идиома JavaScript: создайте функцию только для вызова его

Здесь описано, как генерировать пользовательские ошибки. Я бы предложил принять String как value для идентификатора пользователя. Когда синтаксический анализ value не удался, вы можете выдать свою пользовательскую ошибку.

16
задан Peter Mortensen 11 November 2009 в 20:14
поделиться

2 ответа

Они используют в своих интересах закрытия.

Короткое объяснение: Так как JS использует обзор функционального уровня, можно сделать набор действий в функции и иметь его, остаются в том объеме. Это полезно для вызова кода, который не смешивает с глобальным пространством имен. Это также позволяет делать частные переменные - если Вы объявляете переменную в анонимной функции и сразу выполняете ее, только другой код в анонимной функции может получить доступ к той переменной.

Например, предположите, что я хочу сделать глобальный генератор уникального идентификатора. Можно было бы сделать код как это:

var counter = 0;
var genId = function()
{
    counter = counter + 1;
    return counter;
}

Однако теперь любой может смешать со счетчиком, и я теперь загрязнил глобальное пространство имен двумя переменными (счетчик и genId).

Вместо этого я мог использовать анонимную функцию для генерации моей встречной функции:

var genId = function()
{
    var counter = 0;
    var genIdImpl = function()
    {
        counter = counter + 1;
        return counter;
    }

    return genIdImpl;
}();

Теперь, у меня только есть одна переменная в глобальном пространстве имен, которое выгодно. Что еще более важно, переменная счетчика теперь безопасна от того, чтобы быть измененным - она только существует в объеме анонимной функции и поэтому только функции genIdImpl (который был определен в том же объеме), может получить доступ к нему.

Это похоже в примере кода YUI, они просто хотят выполнить код, который не загрязняет глобальное пространство имен вообще.

45
ответ дан 30 November 2019 в 15:47
поделиться

Они хотят избежать конфликтов пространства имен, я предположил бы. Кажется как хорошая практика в JS.

3
ответ дан 30 November 2019 в 15:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: