Замыкание - это процесс который происходит в момент определения функции. В момент замыкания сохраняется и остается неизменной иерархия областей видимости переменных и самих переменных которые существуют в замыкаемых областях.
Вообще довольно не простая тема function func1 { return function () { console.log(n * 10) } } let calc = func1(35); calc() >>> calc возвращает вложенную функцию. calc мы вызвали без параметра, но она всё равно возвращает результат 350. При ее вызове отработала функция func1 и вернула новую функцию, которая была вызвана в контексте функции func1. Переменная n оказалась замкнута в возвращаемой функции. Поэтому всегда когда будем вызывать calc() в ней всегда будет храниться переменная n, функция ее замкнула