В языке 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
, но тогда он будет виден пользователям сценария, и они могут даже изменить его, если они захотят, даже не нуждаясь в исходном коде. Однако, поскольку он заключен в анонимную функцию, которая возвращает функцию поиска по дате, она доступна только для функции поиска, поэтому теперь она защищена от несанкционированного доступа.