Функциональное программирование: что такое концепция замыкания? (JavaScript/TypeScript)
Всякий раз, когда мы пишем код, мы пишем функции. Функция — это многократно используемый блок кода, который можно вызывать где угодно.
Когда мы вызываем функцию, мы можем предоставить ей входные данные в качестве аргументов, она запускает код и возвращает результат.
Что такое концепция закрытия?
Концепция замыкания — это объявление функции внутри другой функции. Эта концепция дает возможность внутренней функции получать доступ к состояниям внешней функции (например, к переменным и аргументам).
Давайте посмотрим пример кода
const outerFunction = () => {
const state = 10;
const printState = () => {
console.log(state);
};
printState();
};
outerFunction(); // print : 10
Объявление функции внутри другой позволяет нам написать некоторый код и объявить, что делает этот код, назвав функцию. Преимущество в том, что наш код становится более декларативным. Теперь мы знаем, что делает наш код, читая имя функции, а не сам код.
Код без закрытия
давайте посмотрим код без закрытия
const getFileSeparatorByOs = (os: 'linux' | 'windows', enableOsCheking = true) => {
if (enableOsCheking) {
if (os === 'linux') {
return '/';
}
if (os === 'windows') {
return '\\'
}
} else {
return '/'
}
};
const linuxSeparator = getFileSeparatorByOs('linux');
console.log(linuxSeparator);
const windowsSeparator = getFileSeparatorByOs('windows');
console.log(windowsSeparator);
const defaultSeparator = getFileSeparatorByOs('windows', false);
console.log(defaultSeparator);
Этот код на самом деле не сложен для понимания, но мы можем сделать его более декларативным (легким для чтения).
Код с закрытием
давайте посмотрим код без закрытия
const getFileSeparatorByOs = (os: 'linux' | 'windows', enableOsCheking = true) => {
const getLinuxSeparator = () => '/';
const getWindowsSeparator = () => '\\';
const getDefaultSeparator = () => '/';
if (enableOsCheking) {
if (os === 'linux') {
return getLinuxSeparator();
}
if (os === 'windows') {
return getWindowsSeparator();
}
} else {
return getDefaultSeparator();
}
};
const linuxSeparator = getFileSeparatorByOs('linux');
console.log(linuxSeparator);
const windowsSeparator = getFileSeparatorByOs('windows');
console.log(windowsSeparator);
const defaultSeparator = getFileSeparatorByOs('windows', false);
console.log(defaultSeparator);
Заключение
Концепция замыкания заключается в объявлении функции внутри другой, чтобы предоставить ей доступ к состояниям внешней функции.
Если вы увлечены функциональным программированием, вот моя статья о функции каррификации https://link.medium.com/JAoSkvB3Byb
Если эта статья была вам полезна, пожалуйста, поставьте лайк. И, если вам нравятся концепции программирования, которые позволяют писать чистый код, подпишитесь сейчас, чтобы ничего не пропустить.

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































