0

我是学习 JavaScript 的新手,在学习异常处理时有点卡住。我已经理解,每当发生异常时,都会使用“throw”关键字抛出它,同样使用“catch”块捕获它。

但是我无法理解的是,我有一个小而简单的代码来演示简单的异常处理技术,并且在该代码中,每当我更改 catch 块的位置时,我都会得到不同的输出。这是简单的代码及其不同的 o/ps,具体取决于我放置 catch 块的位置。

function lastElement(array) {
     if (array.length > 0)
        return array[array.length - 1];
     else
        throw "Can not take the last element of an empty array.";
}

function lastElementPlusTen(array) {
     return lastElement(array) + 10;
}

try {
   print(lastElementPlusTen([])); 
}
catch (error) {
    print("Something went wrong: ", error);
}

我在这里得到的 o/p 符合预期:

Something went wrong: Can not take the last element of an empty array.

现在当我在函数 lastElementPlusTen 周围添加 try/catch 块时:像这样

function lastElement(array) {
   if (array.length > 0)
     return array[array.length - 1];
   else
     throw "Can not take the last element of an empty array.";
}



 try  {

   function lastElementPlusTen(array) {
   return lastElement(array) + 10;
   }

 }
catch (error) {
    print("Something went wrong: ", error);
}


print(lastElementPlusTen([]));

现在我得到的 o/p 是:

Exception: "Can not take the last element of an empty array."

未打印 catch 块中的“出现问题”。

为什么会这样??类似地,当我将 try/catch 块放置在不同的代码段周围时(例如:围绕第一个函数、lastElementPlusTen 函数的主体等),我得到不同的 o/p。为什么会这样。异常处理如何工作?

4

2 回答 2

1

在第二种情况下,您没有发现异常。它只是抛出未处理的异常,而不是按照您的期望打印它,放置

print(lastElementPlusTen([]));

在里面尝试..catch

尝试:

function lastElement(array) {
    if (array.length > 0) return array[array.length - 1];
    else throw "Can not take the last element of an empty array.";
}

function lastElementPlusTen(array) {
    return lastElement(array) + 10;
}

try { //<-- this is where you need try.. catch not at the function definision
   print(lastElementPlusTen([])); //<-- this invokes the error.

} catch (error) {
    print("Something went wrong: ", error);
}

演示观察控制台的日志

于 2013-10-24T01:13:29.607 回答
1

问题是您将 try/catch 放在函数声明周围 - 错误不会在那里抛出,它是在实际调用函数时抛出的。所以你需要这个:

// this code block will not throw any error, although it will when the function is invoked
function lastElementPlusTen(array) {
   return lastElement(array) + 10;
}

try{
    console.log(lastElementPlusTen([]));
}
catch (error) {
    console.log("Something went wrong: ", error);
}

小提琴演示

于 2013-10-24T01:15:00.467 回答