Start here. This is the direct spoken answer to practice first.
Overview
A good answer defines the retained lexical environment first, then shows why that behavior is useful and where timing can make it surprising.
A closure is a function together with access to the lexical scope where that function was created. That access remains even when the outer function has finished. It is useful for callbacks, function factories, and keeping state without exposing it globally. The important detail is that the closure keeps access to bindings, not a frozen snapshot of every value.