【问题标题】:Is throwing an exception in javascript/nodejs really that bad?在 javascript/nodejs 中抛出异常真的那么糟糕吗?
【发布时间】:2013-04-01 18:35:07
【问题描述】:

我正在阅读有关 nodejs 中的错误处理的内容,并且在阅读此文档时遇到了一些令人不安的事情:

http://nodejs.org/api/domain.html

它说“由于 throw 在 JavaScript 中的工作原理,几乎没有任何方法可以安全地“从你离开的地方继续”,而不会泄漏引用或创建其他类型的未定义的脆弱状态。”

这听起来太可怕了。这真的是说任何时候抛出异常,我都需要关闭线程吗?我觉得我在这里遗漏了一些东西。

【问题讨论】:

标签: javascript node.js exception exception-handling


【解决方案1】:

在正确的情况下抛出异常并没有错。这是一个有用的工具,可以这样使用。异常通常不是正常的、预期的、经常使用的代码路径的正确工具,因为它们很慢,比正常的返回值慢得多。如果性能对您很重要,通常最好在这些类型的情况下使用返回值。

但是,异常可以显着简化意外错误条件或非正常条件的代码,并且在像 javascript 这样的内存管理语言中,您通常不必担心抛出异常时的内存泄漏,除非您在抛出异常时操作持久全局状态的中间。当超出范围时引发异常时,所有局部变量及其引用都会为您清理。

除非你的代码写得不好,否则异常不会导致内存泄漏或脆弱状态,这对于任何其他指示错误情况的方法都是一样的。

【讨论】:

  • “泄漏引用”与“泄漏内存”不同。
  • @Asad - 那么什么是“泄露引用”?
  • 我相信将变量带入不打算从中访问的范围内。
  • @Asad - 当你抛出异常时不会发生类似的事情。 Javascript 是严格限定范围的。抛出异常不会改变任何变量的范围可用性。
  • 我不同意“更好地使用返回值”的说法。这是一些古老的想法。
猜你喜欢
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2013-07-19
  • 2011-08-10
  • 2012-02-03
相关资源
最近更新 更多