background image

成部分的,而且可以在任意地点被调用的函数。JavaScript 的库函数就是这样的例子。

  所有 JavaScript 的库函数都应当为已知的错误条件从它们的公共接口 throw error。
对于 YUI,jQuery 以及 Dojo 等等,我们无法确定会在何时何处调用它们的库函数。所以
当你犯错时对你进行提示就是这些库函数的任务。为什么呢?因为你不可能到库函数内部
去找出错误所在。error 的调用堆栈应当终止于库函数接口,不要再深入。没有什么比在
12 层函数嵌套中寻找错误更遭的事了;库函数开发人员有责任预防这种事情的发生。

  这一条同样适用于私有的 JavaScript 库函数。许多 Web 应用程序都有它们自己专属
的 JavaScript 库,可能是通过这些库来构建的,也可能是用库来代替公共的操作。库函
数的作用是降低开发难度,这是通过向人们提供其抽象表达而不是复杂的实现细节来实
现的。throw error 可以让这些复杂的实现隐藏在安全的地方不被开发者发现。

  JavaScript 同样提供了 try-catch 语句,用来在浏览器处理之前捕获被 throw 的
error。开发者常常会为到底是仅仅 throw error 还是用 try-catch 将其捕获而犹豫不决。
我 们 应 当 只 在 程 序 栈 的 最 底 层 throw error , 就 像 前 面 提 到 的 , 最 典 型 的 就 是
JavaScript 库函数。所有应用程序都应当在逻辑上具有处理 error 的能力,因此应当在底
层模块中捕获 error。

  在应用程序逻辑中我们总是知道为什么要调用某个函数,因此它们非常适合处理
error。有一点要引起注意,就是永远不要在 try-catch 结构中使用空的 catch 语句;你应
当用某种方法处理错误。这钟处理在开发中和最终生产时会有些不同,但必须进行处理。
当错误发生时,不应当仅仅将其包裹在 try-catch

——

里不管

这是掩盖错误而不是解决

错误。

  在 JavaScript 中 throw error 是一门艺术。在代码中找到适当的 throw error 的地点
会花费一些时间。不过一旦你找到了这些地点,你的调试时间就会大大降低,而你对代码
的满意度会获得提升。