[] = (), () = () и {} = () «назначения»

В языке JavaScript (или любом ECMAScript), в частности, замыкания полезны для скрытия реализации функциональных возможностей при показе интерфейса.

Например, представьте, что вы пишете класс утилиты даты и вы хотите разрешить пользователям искать имена будних дней по индексу, но вы не хотите, чтобы они могли изменять массив имен, которые вы используете под капотом.

var dateUtil = {
  weekdayShort: (function() {
    var days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
    return function(x) {
      if ((x != parseInt(x)) || (x < 1) || (x > 7)) {
        throw new Error("invalid weekday number");
      }
      return days[x - 1];
    };
  }())
};

Обратите внимание, что days массив может быть просто сохранен как свойство объекта dateUtil, но тогда он будет виден пользователям сценария, и они могут даже изменить его, если они захотят, даже не нуждаясь в исходном коде. Однако, поскольку он заключен в анонимную функцию, которая возвращает функцию поиска по дате, она доступна только для функции поиска, поэтому теперь она защищена от несанкционированного доступа.

37
задан Chris_Rands 25 January 2018 в 15:14
поделиться