⏩Замыкание — это функция, которая имеет доступ к переменным, присутствующим в ее цепочке областей видимости, даже если внешняя функция перестает существовать.
Чтобы понять суть замыканий, мы сначала рассмотрим их характеристики:
— Даже если внешняя функция перестает существовать, замыкание по-прежнему имеет доступ к ее переменным.
— Замыкания не имеют доступа к параметру
args своей внешней функции.Давайте разберем подробнее первый пункт. Это основная функциональность любого замыкания. В этом сама суть замыканий и принцип работы.
Чтобы увидеть это в действии, мы выполним вот эту функцию
buttonProps:let buttonProps = (borderRadius) => {
const createVariantButtonProps = (variant, color) => {
const newProps = {
borderRadius,
variant,
color
};
return newProps;
}
return createVariantButtonProps;
}let primaryButton = buttonProps("1rem"); Вызов функции
buttonProps вернет нам другую функцию, которая является нашим замыканием.Теперь давайте выполним это замыкание:
const primaryButtonProps = primaryButton("primary", "red");В результате выполнения замыкание возвращает следующий объект:
{
"borderRadius":"1rem",
"variant":"primary",
"color":"red"
}⏩Итак, почему замыкания по-прежнему имеют доступ к переменным, которые определены вне их области видимости, даже если внешняя функция перестает существовать (например,
borderRadius)?⏩Ответ прост: замыкания не хранят статические значения. Вместо этого они хранят ссылки на переменные, находящиеся внутри цепочки областей видимости. Таким образом, даже если внешняя функция умирает, внутренняя функция, то есть замыкание, по-прежнему имеет доступ к родительским переменным.
📎 Читать подробнее
@javascriptv
