めったに使わない finally を久々に使ったらイマイチな挙動がありました
finally の中で return します

const fn = (a) => {
try {
return 1
} finally {
if (!a) return
if (a.value > 10) {
return 2
}
}
}

return した場合は finally の return が優先されます
空の return でもです
しかし return がない場合は本来の return の値が return されます
こういう結果になります

fn()
// undefined
fn({ value: 100 })
// 2
fn({ value: 0 })
// 1

わからなくはない挙動ですが 空 return と return なしの違いは分かりづらいです
finally の中で return することはあまりない上にしないほうがいい気はしますけど 例外的な値の場合に早期 return は結構あると思うのでそれで return が上書きされるのは扱いづらいです
finally の中は関数を呼び出すだけにして その関数の処理で早期 return するとかしたほうがいいのかもしれませんね
つい忘れて return を書いて思わぬ結果になりそうですし



ちなみに Promise の finally だと return は無意味です

const fn2 = (a) => {
return Promise.resolve(1).finally(() => {
if (!a) return
if (a.value > 10) {
return 2
}
})
}

await fn2()
// 1
await fn2({ value: 100 })
// 1
await fn2({ value: 0 })
// 1

return を上書きしたいみたいな特殊なことは少ないですし こっちのほうがいいですね
もし Promise で finally の処理で return 値を書き換えたいなら then の成功失敗両方に同じ関数を渡せばできます
ただ return を書いたかどうかによるわかりづらい違いはないです
本来の return 値を返したいなら明示的に指定する必要があります

const fn3 = (a) => {
const finallyFn = (value) => {
if (!a) return
if (a.value > 10) {
return 2
}
return value // ←これが必要
}
return Promise.resolve(1).then(finallyFn, finallyFn)
}

await fn3()
// undefined
await fn3({ value: 100 })
// 2
await fn3({ value: 0 })
// 1