try…catch…finally
try
必须使用 {}
,至少有一个 catch
或 finally
子句。
不支持条件 catch
。
try {
throw new Error('Oops')
} catch (err) {
// err 只存在于 catch 块
console.error(err)
}
finally
finally
子句始终运行,通常用于清理。
JavaScript 会暂停 try
和 catch
块中的流程控制语句直到 finally
块结束。
var v = function () {
try {
return 1 // 暂停返回直到 `finally` 块结束
} finally {
console.log('suspended')
}
}
console.log(v()) // 1
当 finally
块使用了 return
, throw
, break
或 continue
,try
和 catch
块的流程控制语句被覆盖。应当避免这么做。
var v = function () {
try {
return 1
} finally {
return 2
}
}
console.log(v()) // 1
嵌套 try
内层如果没有 catch 异常(包含 catch 块抛出的异常),外层将 catch 这个异常。
try {
try {
throw new Error('Oops')
} finally {
console.log('finally')
}
} catch (err) {
console.error(err)
}