Замыкание (Closure) или более полно — лексическое замыкание (Lexical closure) — это совокупность функции и данных того контекста (окружения), в котором эта функция создана.
If a function leaves the scope in which it was created, it stays connected to the variables of that scope where function was declared (and of the surrounding scopes). A closure is a function plus the connection to the scope in which the function was created:
Не нужно без необходимости создавать функции внутри функций в тех случаях, когда замыкания не нужны. Использование этой техники увеличивает требования к производительности как в части скорости, так и в части потребления памяти.
Как пример, при создании нового объекта/класса есть смысл помещать все методы в прототип этого объекта, а не описывать их в тексте конструктора. Дело в том, что если сделать по-другому, то при каждом создании объекта для него будет создан свой экземпляр каждого из методов, вместо того, чтобы наследовать их из прототипа.