Как работает замыкание вообще и в JavaScript, в частности?
Пример, который вы привели, относится больше к каррированию (каррингу).
Вы передали некое значение, которое получила в свой контекст внутренняя функция, которая и вернулась.
Замыкание ли это? Безусловно. Почитайте про лексический контекст у Ильи Кантора. Лексический контекст зависит от способа создания (FD, FE или вызов конструктора Function).
У каждой функции есть свой лексический контекст, и самым внешним контекстом является глобальный. Так что переменные и функции, объявленные в глобальном контексте, а также все свойства глобального объекта всегда попадают в замыкание любой функции, если переменные с такими именами не встречаются в цепочке внешних контекстов.Closure — не паттерн, а реализация. К паттерну Singlton не имеет отношения.Тык, пык.
https://www.youtube.com/watch?v=rpIxGwFz0Xs 
напрягись и поймешь