如果您查看域的 Node.js 文档的开头,它会指出:
由于 throw 在 JavaScript 中的工作原理,几乎没有任何方法可以安全地“从上次中断的地方继续”,而不会泄漏引用或创建其他类型的未定义脆弱状态。
同样在代码示例中,它在第一部分给出了它说:
尽管我们已经阻止了突然的进程重启,但我们正在疯狂地泄漏资源
我想了解为什么会这样?哪些资源正在泄漏?他们建议您仅使用域来捕获错误并安全地关闭进程。这是所有例外的问题,而不仅仅是在使用域时?在 Javascript 中抛出和捕获异常是一种不好的做法吗?我知道这是 Python 中的一种常见模式。
编辑
如果抛出异常,我可以理解为什么在非垃圾收集语言中可能存在资源泄漏,因为如果抛出异常,您可能运行来清理对象的任何代码都不会运行。
我可以用 Javascript 想象的唯一原因是,如果抛出异常会将对变量的引用存储在引发异常的范围内(可能还有调用堆栈中的东西),从而保持引用,然后异常对象被保留并且永远不会被清理干净。除非提到的泄漏资源是引擎内部的资源。
更新
我写了一篇博客,现在更好地解释了这个问题的答案。看看这个