根据throw如何在JavaScript中工作的本质,几乎从来没有任何方法可以安全地"拾取你离开的地方",而不会泄漏引用,或者创建一些其他类型的未定义的脆弱状态.
再次在代码示例中,它在第一部分中给出了:
虽然我们已经阻止了突然重启过程,但我们正在疯狂地泄漏资源
我想明白为什么会这样?什么资源泄漏?他们建议您仅使用域来捕获错误并安全地关闭进程.这是所有例外的问题,而不仅仅是在使用域时?在Javascript中抛出和捕获异常是不好的做法吗?我知道这是Python中的常见模式.
编辑
我可以理解为什么如果抛出异常,非垃圾收集语言中可能存在资源泄漏,因为如果抛出异常,您可能运行的任何清理对象的代码都不会运行.
我可以用Javascript想象的唯一原因是抛出一个异常存储引用异常的范围内的变量引用(也许是调用堆栈中的东西),从而保持引用,然后异常对象被保留,从不得到清理.除非所提到的泄漏资源是引擎内部的资源.
UPDATE
我写了一篇博客,现在解释一下这个问题的答案.看看这个