Зачем присваивать эту переменную себе в этом объявлении var? - PullRequest
6 голосов
/ 29 ноября 2011

Я читал у Бена Черри " Шаблон модуля JavaScript: Углубленный ", и у него был пример кода, который я не совсем понял.Под заголовком Cross-File Private State приведен пример кода, который имеет следующий код:

var _private = my._private = my._private || {}

Это не отличается от написания чего-то подобного:

var _private = my._private || {}

Что здесь происходит и чем эти два объявления отличаются?

1 Ответ

7 голосов
/ 29 ноября 2011
var _private = my._private = my._private || {}

Эта строка означает использование my._private, если оно существует, в противном случае создайте новый объект и установите для него значение my._private.

В выражении можно использовать более одного выражения присваивания. Оператор присваивания использует (потребляет) все, что находится справа от него, и выдает это значение в качестве своего вывода слева от присваиваемой переменной. Таким образом, в данном случае, для ясности, в скобках приведенное выше эквивалентно var _private = (my._private = (my._private || {}))

Это случай типа отложенная инициализация . Менее краткая версия будет:

if (!my._private) {
    my._private = {};
}
var _private = my._private;

В этом случае кажется, что ленивая инициализация больше используется для везде инициализации , чем лень. Другими словами, все функции могут включать эту строку для безопасного создания или использования my._private, не удаляя существующую переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...