0
votes

Pourquoi la strophe finally d'un bloc try..catch..finally est-elle exécutée avant catch?

caught error! failed: true
Error: yikes!

2 commentaires

Il n'est pas en cours d'exécution avant le catch , donc failed est true ( post-edit : donc foo est enregistré en premier). Vous semblez avoir répondu à votre propre question avec cette expérience; quelle partie de ce comportement n'est toujours pas claire?


Vous devriez vraiment lancer try {throw; } catch (e) {console.log ("attrapé"); } enfin {console.log ("final"); } pour voir dans quel ordre les blocs s'exécutent. (Et si vous ne relancez pas l'exception, elle ne sera pas imprimée à la fin)


3 Réponses :


1
votes

La clause finally s'exécute avant la fin du bloc try global. L'erreur enregistrée se produit lorsque le moteur d'exécution intercepte l'exception, c'est-à-dire après la fin du bloc try . (Notez que votre code catch ne fait rien console.log () . Il lève une nouvelle exception, mais la clause finally sera toujours exécutée avant le reste du monde le voit.)

Toutes les langues avec try catch enfin que je connais se comportent exactement de la même manière. Le but des blocs enfin est de fournir un emplacement pour placer le code qui est garanti à exécuter, que le try réussisse ou échoue.


0 commentaires

2
votes
  1. Essayez les exécutions - Votre essai s'exécute et génère l'erreur

  2. Catch exécute - Votre capture détecte l'erreur et la relance simplement.

  3. Enfin s'exécute - Vous imprimez votre chaîne

  4. L'erreur renvoyée n'est plus détectée - Et votre navigateur enregistre les détails de l'erreur


0 commentaires

0
votes

L'instruction throw n'imprime rien. L'erreur est imprimée plus tard lorsque le navigateur détecte l'erreur générée.


0 commentaires