69
IMHO it comes down to being able to capture blocks of code and their context to be referenced at some point later on and executed when/if/as required.
They may not seem to be a big deal, and closures definitely aren't something you need to get things done on a daily basis - but they can make code code much simpler and cleaner to write/manage.
[edit - code sample based on the comment above]
Java:
List<Integer> numbers = ...;
List<Integer> positives = new LinkedList<Integer>();
for (Integer number : integers) {
if (number >= 0) {
positives.add(number);
}
}
Scala (skipping some of the other niceties like type inference and wildcards so we're only comparing the effect of the closure):
val numbers:List[Int] = ...
val positives:List[Int] = numbers.filter(i:Int => i >= 0)
Here are some interesting articles: