Javascript嵌套异常处理
我尝试了几个使用嵌套try..catch在javascript中处理异常的例子。内部try块中的代码抛出错误,但是外部catch块捕获异常,而不是内部catch块处理代码。我不明白那部分 我在MDN文档中读到了这一点,但它与我尝试的示例不符: “任何给定的异常只会被最近的封闭catch块捕获一次 当然,在“内部”块中引发的任何新异常(因为 catch块中的代码可能会执行一些抛出的操作),将被“外部”块捕获Javascript嵌套异常处理,javascript,exception,error-handling,Javascript,Exception,Error Handling,我尝试了几个使用嵌套try..catch在javascript中处理异常的例子。内部try块中的代码抛出错误,但是外部catch块捕获异常,而不是内部catch块处理代码。我不明白那部分 我在MDN文档中读到了这一点,但它与我尝试的示例不符: “任何给定的异常只会被最近的封闭catch块捕获一次 当然,在“内部”块中引发的任何新异常(因为 catch块中的代码可能会执行一些抛出的操作),将被“外部”块捕获 函数a(){ 试一试{ d() 函数d(){ 试一试{ 让用户=“你好” let use
函数a(){
试一试{
d()
函数d(){
试一试{
让用户=“你好”
let user={name:'bruce'}
}捕捉(错误){
log(err,“函数内部错误”)
}
}
}捕捉(错误){
console.log(err,“错误捕获”)
}
}
a()
在您的代码段中,当您声明let user
时,let允许您声明限制在块语句范围内的变量,或声明在其上使用的表达式,这与var关键字不同,var关键字全局定义变量,或局部定义整个函数,而不考虑块范围
如果保持相同的变量名,则在程序编译时会被视为错误,
try-catch
会在运行时检测到错误。因此,您的程序没有完全编译,并且由于重复变量名
,在编译时会出现错误
希望你明白我的意思
相反,请尝试以下代码
function a() {
try {
d()
function d(user) {
try {
JSON.parse(user);
} catch (err) {
console.log(err, "inside the function err")
}
}
} catch (err) {
console.log(err, "Error caught")
}
}
a()
它将为您提供预期的输出 我想知道let
错误是否发生在解析时,而不是执行时,因此它会在您进入内部try
之前抛出。另一种可能性是,try块不是实际的块范围,因此在d()
中,两个let
语句被提升到第一个块的顶部,因此双let
错误出现在try
语句之前。我仍然有点困惑,我用一个“let”和“var”进行了尝试,之后是相同的错误,我应该做些什么改变才能使异常在内部catch块中被捕获,并产生相同的错误您的问题无法重现。。。错误根本不会被发现!