其实很容易想明白:帮你擦屁股的人,总要花费很多人力、物力、财力。😄😄

    直接总结吧,懒得贴图了:

    • 需要注意的性能消耗在于 try catch 中不要直接塞进去太多的代码(声明太多的变量),最好是把所有要执行的代码放在另一个 function 中,通过调用这个 function 来执行。
    • 如果不抛异常的话,其实性能是没多少影响的。 但是,如果抛异常了,这就会造成很大的性能影响。当抛异常的时候,需要去生成一个栈跟踪(stack track), 这个主要是描述异常的相关信息,比如会对当时栈进行快照,记录栈帧所指向的类名,方法名, 以及在哪一行代码上抛出的异常信息等等,这就是用异常捕获耗时的地方了。 因此,在实际开发过程中,要适当捕获异常,而且仅捕获有必要的代码段。


    建议
    针对第一点,可以查看 ECMA 中关于 try catch 的解释,在代码进入 try catch 的时候 js引擎会拷贝当前的词法环境,拷贝的其实就是当前 scope 下的所有的变量
    在使用 try catch 的时候尽量把 try catch 放在一个相对干净的 scope 中,同时在 try catch 语句中也尽量保证足够少的变量,最好通过函数调用方式来 try catch。

    结合了实战的一些分析,作出一些浅显的总结:

    1. 如果我们通过完善一些测试,尽量确保不发生异常,则无需尝试使用 trycatch 来捕获异常。
    2. 非异常路径不需要额外的 trycatch,确保异常路径在需要考虑性能情况下优先考虑 ifelse,不考虑性能情况请君随意,而异步可以考虑回调函数返回 error 信息对其处理或者使用 Promse.reject()。
    3. 应当适当减少 trycatch 使用,也不要用它来保护我们的代码,其可读性和可维护性都不高,当你期望代码是异常时候,不满足上述1,2的情景时候可考虑使用。