What if the try block returns early or throws an exception that you are not handling? You still want to free up the resources that you have allocated, right?
EDIT:
The answers to this question seem almost philosophical, there are some "guesses", and basically "we believe that it should be useful because it exists, therefore it should be used," and "even Oracle says so." Or maybe it helps the programmer not to "forget something" or "accidentally exit and not realize it."
These are almost all good reasons, but there is also a technical reason.
This helps to avoid code duplication in the mentioned cases when (a) either try is returned, or one of the catch blocks, or (b) if a second exception is thrown in the catch block.
In these cases, if some cleanup code or any other code that still needs to be executed after the return and after the second exception can be placed in the finally block, if it should be executed both after the try block and after the catch block,
You can still do this without the finally block, but the code will have to be duplicated, which the finally block avoids. This is where you really need to.
So, if you are sure that you will not miss it as case (a) or (b), you can still put the 'finally' code after the try / catch block and omit the finally clause.
But what if the situation changes? When you or another person change the code at a later stage, you may forget to check if the cleanup code is missing in any situation now.
So why not always put the cleanup code in a finally block? And this is what is recommended and what many JavaScript programmers do.