Что такое и как работают замыкания (closures) в JavaScript?