function f(){
try{
if (/*some codes*/) throw false;
return true;
}
catch(x){
if (x===false) return false;
throw x;
}
}
这里,“抛出x”是什么意思?似乎“catch”中的代码不会运行两次。
答案 0 :(得分:2)
这意味着它会将异常抛出到调用函数,该函数将执行其catch块,以防定义了一个。
例如,在下面的代码中,您在callthis()函数中记录异常,但您希望调用函数(init())决定如何处理它。因此,你重新抛出异常,它会冒泡。
window.onload = init();
function init(){
try {
callthis();
} catch(e) {
alert('init - calling function');
}
}
function callthis(){
try {
var x = null.split(','); //inducing an error
} catch(e){
alert('callthis - called function');
throw e;
}
}
答案 1 :(得分:2)
如果你有类似的话:
try {
try {
//something
} catch(x) {
throw x;
}
} catch(x) {
//handle it
}
内部catch的抛出会导致外部catch执行
答案 2 :(得分:1)
当您在Javascript中有try/catch
块时,catch
块将会在try
块中发生任何错误。关键字throw
用于向上级范围(调用函数的样本)抛出错误,传递catch
块将要执行的错误(异常)。在catch
中,您可以将异常作为第一个参数。在您的代码中,使用throw x
获取错误,其中x
是例外。调用者将获取x
作为catch块的参数。
function K()
{
try
{
f();
}
catch(ex)
{
// handle any exception thrown by f();
}
}
答案 3 :(得分:1)
这是你捕获异常并将其冒充堆栈供用户处理的方式。
我不想看到这段代码。您已经捕获了异常并将返回值设置为false。为什么抛出异常?让用户检查返回值并决定下一步做什么。你的catch块没有任何用处。
如果你遇到异常,你应该考虑处理它,不应该重新抛出它。唯一的例外是将已检查的异常包装为未选中。
如果你无法处理它,并且日志记录不被视为处理,我宁愿将throws子句添加到方法签名中,让它冒出方法。