Перенесите secret внутрь замыкания, из которого возвращается только a. Изменение var на let в той же общей области само по себе не скроет переменную от b.
Как скрыть переменную от соседней функции
Перенесите secret внутрь замыкания, из которого возвращается только a. Изменение var на let в той же общей области само по себе не скроет переменную от b.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В одном модуле объявлены const secret = 42; function a(){ return secret; } function b(){ return secret; }. Нужно оставить доступ a и убрать лексический доступ b. Как изменить область видимости?
Ответ
Перенесите secret внутрь замыкания, из которого возвращается только a. Изменение var на let в той же общей области само по себе не скроет переменную от b.
Например:
const a = (() => {
const secret = 42;
return () => secret;
})();
function b() {
return typeof secret;
}
Теперь a возвращает 42, а b — строку undefined, если внешней переменной secret нет. Это инкапсуляция программы, а не защита секретов от пользователя, контролирующего клиентский JavaScript.