Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript嵌套异常处理_Javascript_Exception_Error Handling - Fatal编程技术网

Javascript嵌套异常处理

Javascript嵌套异常处理,javascript,exception,error-handling,Javascript,Exception,Error Handling,我尝试了几个使用嵌套try..catch在javascript中处理异常的例子。内部try块中的代码抛出错误,但是外部catch块捕获异常,而不是内部catch块处理代码。我不明白那部分 我在MDN文档中读到了这一点,但它与我尝试的示例不符: “任何给定的异常只会被最近的封闭catch块捕获一次 当然,在“内部”块中引发的任何新异常(因为 catch块中的代码可能会执行一些抛出的操作),将被“外部”块捕获 函数a(){ 试一试{ d() 函数d(){ 试一试{ 让用户=“你好” let use

我尝试了几个使用嵌套try..catch在javascript中处理异常的例子。内部try块中的代码抛出错误,但是外部catch块捕获异常,而不是内部catch块处理代码。我不明白那部分

我在MDN文档中读到了这一点,但它与我尝试的示例不符:

“任何给定的异常只会被最近的封闭catch块捕获一次 当然,在“内部”块中引发的任何新异常(因为 catch块中的代码可能会执行一些抛出的操作),将被“外部”块捕获

函数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块中被捕获,并产生相同的错误您的问题无法重现。。。错误根本不会被发现!