Why does a return in `finally` override `try`?

bonfo picture bonfo · Oct 1, 2010 · Viewed 44k times · Source

How does a return statement inside a try/catch block work?

function example() {
    try {
        return true;
    }
    finally {
        return false;
    }
}

I'm expecting the output of this function to be true, but instead it is false!

Answer

annakata picture annakata · Oct 1, 2010

Finally always executes. That's what it's for, which means it's return gets used in your case.

You'll want to change your code so it's more like this:

function example() { 
    var returnState = false; // initialisation value is really up to the design
    try { 
        returnState = true; 
    } 
    catch {
        returnState = false;
    }
    finally { 
        return returnState; 
    } 
} 

Generally speaking you never want to have more than one return statement in a function, things like this are why.