try {
var div = document.createElement(’div’);
div.appendChild(div);
} catch (e) {
throw new Error(e.toString());
}
}
然而,您可能将考虑是否要使用该模式 。这可能是最适用于实用工具库开发的模式,特别是在您考虑代码的意图是否为隐藏 DOM 操作或简单地实施某一任务的时候 。如果其目的为隐藏 DOM 操作,那么合并操作并引发 Error 可能是我们需要选择的正确方式 。
性能注意事项堆栈跟踪的构造始于错误对象被引发之时;构造堆栈跟踪需要查看当前执行堆栈 。为了防止遍历特大堆栈过程中出现性能问题(甚至可能出现的递归堆栈链),默认情况下,IE 仅将收集前十位的堆栈帧 。然而该设置可通过将静态属性 Error.stackTraceLimit 设置为另一数值而得以配置 。该设置是全局性的,而且必须在引发错误之前 进行变更,否则其将对堆栈跟踪无效 。
异步异常当某一堆栈是由异步回调(例如 timeout、interval 或 XMLHttpRequest)生成,那么异步回调(而非由异步回调创建的代码)将位于调用堆栈的底部 。这将对跟踪有问题的代码产生某些潜在影响:如果您对多个异步回调使用相同的回调函数,那么您将难于通过单独检查而确定是哪一回调产生了错误 。让我们对此前的示例稍作修改,我们将避免直接调用 sample(),而是将其放入超时回调:
复制代码代码如下:
(function () {
’use strict’;
function squareRoot(n) {
if (n0)
throw new Error(’Cannot take square root of negative number.’);
return Math.sqrt(n);
}
function square(n) {
return n * n;
}
function pointDistance(pt1, pt2) {
return squareRoot((pt1.x - pt2.x)(pt1.y - pt2.y));
}
function sample() {
var pt1 = { x: 0, y: 2 };
var pt2 = { x: 12, y: 10 };
console.log(’Distance is: ’pointDistance(pt1, pt2));
}
setTimeout(function () {
try {
sample();
}
catch (e) {
console.log(e.stack);
}
}, 2500);
})();
一旦执行该代码段,您将发现堆栈跟踪将出现稍许延迟 。此时,您将同时发现堆栈底部并非全局性代码,而是Anonymous function 。事实上,这并非同一匿名函数,而是传递至 setTimeout 的回调函数 。由于您丢失了与挂起回调有关的上下文,因此您可能无法确定调用回调的内容 。如果在某一应用场景中,系统注册了某一回调来处理许多不同按钮的 click 事件,那么您将无法分辨注册将引用哪一回调 。话虽如此,这一限制作用毕竟有限,因为在大多数情况中,堆栈顶部可能将突出显示问题区域 。
观看体验演示

了解 Windows 8 Consumer Preview 中 IE10 的使用情况 。您可在 eval 的上下文中执行代码,如果发生错误,您便可检查出该错误 。如果您在 IE10 内运行代码,由于您可将错误代码行悬停于堆栈跟踪中,因此您也可突出显示您的代码行 。您可自行将代码输入到代码区域,或者从列表中的数个示例中进行选择 。此外,您还可在运行代码示例时设置 Error.stackTraceLimit 值 。
【IE10 Error.stack 让脚本调试更加方便快捷】如欲查看参考材料,请浏览有关 Error.stack 和 stackTraceLimit 的 MSDN 文档 。
推荐阅读
- 置IE10浏览器临时文件的大小、位置和保存天数的详细方法
- ie10打不开支付宝/淘宝网站解决方案
- IE10浏览器无法记住网站的登陆账号和密码的解决方法
- win8下IE10浏览器权限解锁步骤分享无需使用管理员模式
- Win8自带浏览器IE10中flash无法正常播放的解决方法
- 只需几步就可破除Win8中IE10对Flash网站的限制
- 在win8中找回消失的Metro版IE10的方法
- 将电脑的收藏夹导入至IE10浏览器的方法
- IE10开启InPrivate 隐私浏览模式自动删除上网的蛛丝马迹
- 粗上加粗的IE10字体宽到超出原本的容器
