◆ try-catch をキャッチが必要なところだけにするとスコープの問題であとの処理で内側の変数を参照できない
◆ if-else のときと同じように try の前の外側で let で変数宣言しておけばできるけどそのために let にするのは嫌
◆ try-catch の結果を式にしたい のでできるような関数をつくってみた

こんな感じの処理があります

const a = fa()
const b = fb(a)
const c = fc(b)
const d = fd(c)
const e = fe(d)

fc 関数ではエラーが起きる可能性があります
エラーが起きたときにはエラー情報の中に fa や fb で取得した情報を含めたいです

なので一旦キャッチすると

const a = fa()
const b = fb(a)
try{
const c = fc(b)
const d = fd(c)
const e = fe(d)
}catch(err){

}

c, d, e 全部 try の内側にあるのがなんか嫌です
catch したいのは fc だけです
しかし fc だけを try に入れるとスコープの都合で fd の呼び出しで c を使えません

const a = fa()
const b = fb(a)
try{
const c = fc(b)
}catch(err){
}
const d = fd(c)
// c が未定義でエラー
const e = fe(d)

それだけのために try の外側 let で変数宣言しておくのも嫌です

try-catch が式で結果を代入できたらいいなと思ったのでそういうのを作ってみました
const a = fa()
const b = fb(a)
const c = tryCatch(() => fc(b), err => {})
const d = fd(c)
const e = fe(d)

function tryCatch(action, errcb){
try{
return action()
}catch(err){
return errcb(err)
}
}

関数自体にエラーが起きたときの処理を設定できるのもいいなと思ってこんなのも作ってみました

Function.prototype.catchBy = function(errcb){
return (...args) => {
try{
return this(...args)
}catch(err){
return errcb(err)
}
}
}

fn.catchBy(err => {})(2)

関数のメソッド catchBy でエラーが起きたときの処理を設定した関数を受け取ってそれを実行します
さっきのだと

const a = fa()
const b = fb(a)
const c = fc.catchBy(err => {})(b)
const d = fd(c)
const e = fe(d)

ちょっと短く書けました