<aside> ⚠️ 호스트 환경을 확인하세요. 이 절은 코어 JavaScript 가 아닙니다.
</aside>
try..catch 바깥에서 치명적인 에러가 발생해 스크립트가 죽었다고 가정해봅시다.
대처 방법은 무엇이 있을까요? 어딘가에 에러 내역을 기록해 놓거나 사용자에게 에러가 발생했음을 알려주는 행위를 할 수 있을 겁니다.
JavaScript 명세서에는 이런 치명적인 에러에 대응하는 방법이 적혀있지 않습니다. 하지만 try..catch 에서 처리하지 못한 에러를 잡는 것은 아주 중요하기 때문에, JavaScript 호스트 환경 대다수는 자체적으로 에러 처리 기능을 제공합니다.
Node.js의 process.on(”uncaughtException”)
이 그 예입니다.
브라우저 환경에선 window.onerror
를 이용해 에러를 처리할 수 있습니다. window.onerror
프로퍼티에 함수를 할당하면, 예상치 못한 에러가 발생했을 때 이 함수가 실행됩니다.
window.onerror = function(message, url, line, col, error) {
// ...
}
message
에러 메시지
url
에러가 발생한 스크립트의 URL
line, col
에러가 발생한 곳의 줄과 열 번호
error
에러 객체
<script>
window.onerror = function(message, url, line, col, error) {
alert(`${message}\\n At ${line}:${col} of ${url}`);
};
function readData() {
badFunc(); // 에러가 발생한 장소
}
readData();
</script>
그런데 전역 핸들러 window.onerror
는 죽어버린 스크립트를 복구하려는 목적으로는 잘 사용하지 않습니다. 프로그래밍 에러가 발생한 경우 window.onerror
만으로 스크립트를 복구하는 건 사실상 불가능합니다. window.onerror
는 개발자에게 에러 메시지를 보내는 용도로 사용합니다.