Каким образом взаимодействует возвращаемый функцией объект со scope этой функции?
function createModal() {
const modal = _modalConstructor();
return {
setContent (content) {
modal.querySelector('.modal__body').innerHTML = content;
},
open(){
modal.classList.add('active');
},
}
}
const obj = createModal();
Насколько я понимаю переменная obj является ссылкой на результат вызова уже вызванной функции createModal, вернувшей объект содержащий методы. Если вызвать метод через obj.open(), то всё работает. Однако мне совершенно не ясно, почему возвращаемый функцией объект имеет доступ к переменной modal.
Ответы (1 шт):
Это явление называется замыканием. Кратко говоря, если функция создаётся определённой области видимости и использует переменные из этой области видимости, связь с этими переменными сохраняется у функции, даже если она будет вызвана из другой области видимости. Функция как бы замыкается вокруг области видимости, в которой она была создана, и эта области видимости не будет очищена уборщиком мусора, пока сохраняется сама функция с ссылками на переменные.
Подробнее можно почитать здесь:
https://learn.javascript.ru/closure
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures