[ Web Proxy ]
URL:
Viewing: https://fr.javascript.info/task/finally-or-code-after [Back]  [Original]

Finally ou juste le code ?
FR

Nous souhaitons rendre ce projet open source disponible pour les gens du monde entier.

Aidez-nous traduire le contenu de ce tutoriel dans votre langue!

    Rechercher sur Javascript.info:
    Rechercher dans le tutoriel:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek
    retour au cours

    Finally ou juste le code ?

    importance: 5

    Comparez les deux fragments de code.

    1. Le premier utilise finally pour excuter le code aprs try..catch :

      try {
        work work
      } catch (err) {
        handle errors
      } finally {
        cleanup the working space
      }
    2. Le deuxime fragment fait le nettoyage juste aprs try..catch :

      try {
        work work
      } catch (err) {
        handle errors
      }
      
      cleanup the working space

    Nous avons absolument besoin du nettoyage aprs le travail, peu importe quil y ait une erreur ou non.

    Y at-il un avantage ici utiliser finally ou les deux fragments de code sont gaux ? Si un tel avantage existe, donnez un exemple lorsque cela compte.

    solution

    La diffrence devient vidente quand on regarde le code dans une fonction.

    Le comportement est diffrent sil y a un saut en dehors de try..catch.

    Par exemple, quand il y a un return dans try..catch. La clause finally fonctionne en cas de toute sortie de try..catch, mme via linstruction return : juste aprs la fin de try..catch, mais avant que le code appelant obtienne le contrle.

    function f() {
      try {
        alert('start');
        return "result";
      } catch (err) {
        // ...
      } finally {
        alert('cleanup!');
      }
    }
    
    f(); // cleanup!

    Ou quand il y a un throw, comme ici :

    function f() {
      try {
        alert('start');
        throw new Error("an error");
      } catch (err) {
        // ...
        if("can't handle the error") {
          throw err;
        }
    
      } finally {
        alert('cleanup!')
      }
    }
    
    f(); // cleanup!

    Cest finally qui garantit le nettoyage ici. Si nous mettons simplement le code la fin de f, il ne fonctionnerait pas dans ces situations.


    Web Proxy Viewer  |  New URL  |  Original Page