[JavaScript] try-catch-finally ejecuta la lógica y si incluye el impacto del retorno

intente {Bloquear} declaración de captura

try catchLa declaración primero ejecutará el bloque de código envuelto por try, y juzgará si ingresar catchel bloque de código de acuerdo con el resultado de la ejecución del bloque de código.

  • Si catchel bloque de código también lanza una excepción, anulará tryla excepción lanzada en la declaración
function test (){
    try {
        throw new Error('error1');
    } catch (e) {
        throw new Error('error2');
    }
}
  • Si el bloque de código tiene un resultado devuelto, el resultado de la ejecución de la declaración catchse sobrescribirá cuando se produzca una excepción . tryDe lo contrario, Blockdevuelve undefined porque se lanza una excepción. yo
function test (){
    try {
        return 0
    } catch (e) {
        return 1
    }
}
test() // 0
function test1 (){
    try {
        throw new Error()
        return 0 // 这里不会执行到
    } catch (e) {
        return 1
    }
}
test1() //1

intente {Bloquear} -finalmente declaración

  • Si finallyel bloque de código también lanza una excepción, anulará tryla excepción lanzada en la declaración
function test (){
    try {
        throw new Error('error1');
    } finally {
        throw new Error('error2');
    }
}
test() //'error2'
  • tryfinallyEl código envuelto con y se ejecutará en secuencia, y se registrarán al mismo tiempo los resultados devueltos B y F. Si F tiene un valor de retorno (retorno normal o anormal), se devolverá el resultado de F, de lo contrario, el resultado de B será devuelto
function test (){
    try {
        throw new Error()
    } finally {
        return 1
    }
}
test() // 1

function test2 (){
    try {
        return 0
    } finally {

    }
}
test2() // 0

function test3 (){
    try {
        return 0
    } finally {
        return 1
    }
}

test3() // 1

intente {Block} declaración catch -finally

Es equivalente a la ejecución combinada de Try Catch y Try finalmente, primero ejecute el resultado del procesamiento de Try Catch y luego fusione el resultado con finalmente, la excepción en finalmente cubrirá la excepción y regresará en Try/Catch.

function test() {
    var a = 1;
    try {
        return a;
    } finally {
        ++a;
    }
}
test() // 1

function test1() {
    var a = 1;
    try {
        return a;
    } finally {
        ++a;
        return a;
    }
}
test1() // 2
function test2() {
    var obj = {a:1};
    try {
        return obj;
    } finally {
        ++obj.a;
    }
}
test2().a // 2

function test3() {
    var obj = {a:1};
    try {
        return obj.a;
    } finally {
        ++obj.a;
    }
}
test1() // 1

Resumir:

  • catchlas excepciones tryanulan las excepciones para yreturn
  • catchreturnLa excepción de anulación tryyreturn
  • finallyLa excepción de try/catchanula la excepción de yreturn
  • finallyreturnLa excepción de anulación try/catchyreturn
  • try/catch/finallyEl código en o returndespués no se ejecutará

Supongo que te gusta

Origin blog.csdn.net/qq_38987146/article/details/125314583
Recomendado
Clasificación