return文を2回実行すると上書きされる

JScriptで、tryまたはcatch内でreturnを実行した結果finallyのreturn文が実行されてしまう、と言う間抜けなことをやったので、同じことを繰り返さないために覚書。

Code 1
var message = function(){
    try{
        return "try";
    }catch(e){
        /* エラー処理 */
    }finally{
        return "finally";
    }
}();

Code 1では、return "try";が実行されたことにより処理がcatchから抜けることがトリガとなりfinallyが実行され、戻り値が "finally" になる。
実際に罠にはまったのは、try内で条件分岐し、returnが実行されたり、されなかったりするコードだったが、どちらの場合でもfinallyのreturnが最後に必ず実行されてしまうという間抜けなことに。なんと言うか、switch文でbreak書き忘れて、全部defaultになっちゃう、みたいな。
反省。
ちなみに、finallyが実行されるのはreturnの実行後なので、finallyで変数を変更しても問題ない。

Code 2
var message = function(){
    var temp = "";
    try{
        temp = "try";
        return temp;
    }catch(e){
        /* エラー処理 */
    }finally{
        temp = "finally";
    }
    return temp;
}();

Code 2の場合、try内のreturnによりfinallyに処理が移り、tempには "finally" が代入されるが、戻り値は "try" となる (それはそれとして、誤解を招くし、読みにくいのでどうかとは思いますが)。