첫 번째 코드는 try..catch 이후에 코드를 실행하기 위해 finally 를 사용하였습니다.

try {
	// 작업..
} catch (err) {
	// 에러 핸들링..
} finally {
	// 작업 내역 삭제
}

두 번째 코드에서는 try..catch 바로 아래에 작업 내역을 삭제하는 코드를 놓았습니다.

try {
	// 작업..
} catch (err) {
	// 에러 핸들링..
}

// 작업 내역 삭제

현재 상황은 에러의 유무와 관계없이, 작업 후 초기화를 해야합니다.

*finally 를 사용하면 이점이 있을까요? 아니면 두 코드 조각은 동일하게 동작할까요?*

차이점은 함수 내부의 코드를 보면 분명해집니다.

try..catch 에 빠져나오게 하는 코드가 있다면 (return, throw)함수의 행동이 달라집니다.

return

function func() {
  try {
    alert('시작');
    return "결과";
  } catch (e) {
    /// ...
  } finally {
    alert('초기화!');
  }
}

func(); // cleanup!

throw

function func() {
  try {
    alert('시작');
    throw new Error("에러 발생!");
  } catch (e) {
    // ...
    if("에러를 핸들링 할 수 없다면") {
      throw e;
    }

  } finally {
    alert('초기화!')
  }
}

func(); // cleanup!

이렇게 finally 절을 붙여줘야 초기화가 보장됩니다. 작업 내역을 초기화해주는 코드를 단순히 func 의 끝에 붙였다면, 위와 같은 상황일 때 초기화 코드가 실행되지 않습니다.