[javascript]자바스크립트에서 finally

codeing999·2023년 7월 6일
0

JavaScript

목록 보기
23/24

try나 catch문에서 return을 하거나, catch에서 throw를 해도 finally는 무조건 실행이되는 건가 궁금해서 검색을 해보았다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/try...catch
https://webclub.tistory.com/71
검색해보니 finally는 이런 경우에도 항상 실행된다고 한다.
그래서 테스트 해보았다.

throw한 경우

let test = () => {
  try {
    console.log("try");
    throw new Error();
  } catch (e) {
    console.log("catch");
    throw e;
  } finally {
    console.log("finally!!!");
  }
};

try {
  test();
} catch (e) {
  console.log("main");
}

test라는 함수에서 try에서 무조건 에러를 throw하고 이걸 다시 catch에서 throw한다. 여기서 만약에 바로 밖으로 빠져 나간다면 finally 안의 "finally!!!"는 출력되지 않을 것이다.

try
catch
finally!!!
main

결과는 위와 같이 finally!!!도 출력이 되었다.

그리고 try나 catch에서 발생한 에러가 있더라도 finally에서 새로운 에러가 발생하면 이걸로 덮어 씌워진다고 한다.

let test = () => {
  try {
    throw new Error("try error");
  } catch (e) {
    throw e;
  } finally {
    console.log(출력);
  }
};

try {
  test();
} catch (e) {
  console.log(e.message);
}

이렇게 했을 때

출력 is not defined

finally에서 발생한 에러의 메세지가 출력됨을 확인했다.

return한 경우

let test = () => {
  try {
    return "try"
  } catch (e) {
    return "catch"
  } finally {
    return "finally!!!"
  }
};

try {
  console.log(test())
} catch (e) {
  console.log("main");
}

return을 했을 때도 finally는 항상 실행된다고 하였는데 그렇다면 위와 같은 경우엔 어떻게 될까 해보았다.

finally!!!

가 출력되었다.

그리고 그전에 return하려던 것이 있어도 finally에 있던 return으로 덮어쓴다고 한다.

profile
코딩 공부 ing..

0개의 댓글