简短的一句的确描述了try...catch的大部分功能。
但是,最MDN的最后,有一段话是这么写的:
如果finally语句块中有返回值,那么这个值将作为整个try...catch语句的返回,无论try语句块或者catch语句块中是否有返回,这包括了catch中的异常。
ok,那我们就尝试加上return,看看会发生什么。
一切看起来都如我们所想,没有问题,继续往下看。
正如上图所示,这里打印的是try的return,但是,finally语句块中的log依然被执行了。 看到这里,我们可以知道,finally的执行时机是在try(或者cache,cache同理)执行return之前被执行。 那我们就可以验证下MDN上所说的:finally语句块的返回值 这句话的真正含义。
ok,依然很正常,因为finally会在try的return之前执行,所以拦截了try中的return,打印了finally中的return。
你答对了没有? 可以看到,红框内为justLog函数的log,红框下面是finally中的打印和返回。 所以finally真正的执行时机是:try(或catch)中 return关键字之前。 所以我们才看到了justLog中的打印。 有关return关键字的实现,可以自行查询标准,这里不赘述。
我们想要返回所传递参数的执行结果,这样做是没问题的。
那如果我们想在函数执行之后,return之前,做一些其他操作,应该怎么做呢?
很简答,我们可以先获取返回值,再进行其他操作,然后return。 不过这样我们就占用了额外的空间,而且无法便利的复用return后的语句,这个时候,我们的try...catch就可以排上用场了:
大白话来讲,finally语句块会在try(或catch)中的 return 关键字之前执行。一图以概之:
最后,如果有帮到你的地方,欢迎关注、交流。